一本书的页码从自然数1 开始顺序编码直到自然数n书的页码按照通常的习惯编排,每个页码都不含多余的前导 一本书的页码从自然数1开始顺序编码直到自然数n。求的页码按...

\u4e00\u672c\u4e66\u7684\u9875\u7801\u4ece\u81ea\u7136\u65701 \u5f00\u59cb\u987a\u5e8f\u7f16\u7801\u76f4\u5230\u81ea\u7136\u6570n\u4e66\u7684\u9875\u7801\u6309\u7167\u901a\u5e38\u7684\u4e60\u60ef\u7f16\u6392

console.write(0""1""2""3""4""5""6""7""8""9"");
int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;
for(int m=1;m<=n;m++)
{
string x=convert.toint32(m);
for(int y=1;y<=10;y++)
{
swicth(convet.toint32(substring(x,1,y)))
{
case 1:a++;
case 2:b++;
case 3:c++;
case 4:d++;
case 5:e++;
case 6:f++;
case 7:g++;
case 8:h++;
case 9:i++;
case 0:j++;

}

}
console.write(a+""+b+""+c+""+d+""+e+""+f+""+g+""+h+""+i+""+j);


处理多个输入,楼主自己写个数组就行了,我只考虑对某个n的计算方法。
int times=0; int needMinus=0;
int arr[10];
int save=n;
while(n>10)
{
times+=n/10;
needMinus++;
n/=10;
}
for(int i=0;i!=10;++i)
arr[i]=times;
arr[0]-=needMinus;

n=save;
for(int i=1;i<=needMinus+1;++i)
{
int e=n%10;
for(int j=1;j<=e;++j)
arr[j]++;
n/=10;
}

到这儿,数组arr中依次存放了0-9的出现次数。
算法思路,主要就是按层分析,每一位上都是0-9循环,循环次数是这一位之前的数值大小,
比如456321,那么位值6这一位共循环了45次,2这一位循环4563次,这儿的循环指的是
完整循环,但是第一次循环没有0,算法后面减去了needMinus(其实等于总位数减去一),
剩下的工作就是把每一位最后一次没有循环完成的计数进去。

shenmewenti

扩展阅读:页码第三页显示第一页 ... 在第二页开始页码为1 ... 页码问题大全及答案 ... 给一本书编页码 ... 作品集页码 ... 一本书的页码从1记到n ... 一本书页码从1到62 ... 页码和数码问题及答案 ... 从正文开始加入 页码 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网