题目描述
一个10进制无前导0的整数a,如果a有偶数位,只含有0和1的数码,且从左到右和从右到左读都是一样的,那么我们称其为“完美回文数”。 比如,1001,11这些都是完美回文数,而12,1010,1,101这些都不是“完美回文数”。 请问一个整数n等于最少多少个完美回文数的和?
输入
第一行是样例数T(1≤T≤1000)。 以后每行一个样例,为一个整数n(1≤n≤100000)
输出
每行输出一个样例的结果,如果n不能由完美回文数累加得到,输出0。
样例输入
5 1 11 1012 2002 3333
样例输出
0 1 2 2 3
思路:n的范围是小于10的五次方,依题意得在此范围内只有三个完美回文数:11,1001,1111。
其中1001=11*91,1111=11*101。因此只要11*(x+91y+101z)=n即可。如果n不能被11整除那么肯定就不能是回文数和。
下面是AC代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,j,z;
scanf("%d",&n);
while(n--)
{
int a,flag=1;
scanf("%d",&a);
int min;
if(a%11!=0)
{
printf("0\n");
}
else
{
a=a/11;
for(i=0;i<=a;i++)
{
for(j=0;j*91<=a;j++)
{
for(z=0;z*101<=a;z++)//要保证加的次数最少,那么被加的数一定要够大,所以先从大的开始加
{
if((i+j*91+z*101)==a)
{
flag=0;//标记标记
min=i+j+z;
break;
}
}
if(flag==0)
{
break;
}
}
if(flag==0)
{
break;
}
}
printf("%d\n",min);
}
}
return 0;
}