简单题,这题比赛时思绪混乱,哎,还是不行啊,
以后还得仔细读题,重点:学好英语!!!!
题意:计算一个数按下面操作能产生多少个数;
1,直接输出n;(产生1个数)
2,在n的左边加一位数,这个数小于n的最高位的一半!!!(哎,刚开始理解成n的一半)
3.如果不能在添加数,结束,如果能,返回执行1.
例如,6,现输出6,之后可以变16,26,36,接着执行3,16不能再变,26可以变126,36可以变136;所以6,16,26,36,126,136,共6个。
0-9的直接算也可以,递归:f(n)=f(1)+f(2)+...f(n/2);
大于10的,直接取最高位按0-9的输出即可!!!
#include<stdio.h>
__int64 a[10]; //(int也行,习惯用它了,int老超,怕了)
int main ()
{
__int64 t,n,i,k;
a[1]=1;a[2]=2;
for(i=3;i<10;i++)
{
a[i]=1;
for(k=1;k<=i/2;k++)
a[i]+=a[k];
}
scanf("%I64d",&t);
while(t--)
{
scanf("%I64dd",&n);
while(n>9)
n/=10;
printf("%I64d\n",a[n]);
}
return 0;
}