蓝桥杯题解
题目标题: 排它平方数小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
我使用C语言编出代码反复的调试、修改,耗时不知N天,终于算出,尽管如此,还是搞不清楚为什么算出。各位高手请帮看一下,能不能使用更简便的方法。
我的代码:
#include<stdio.h>
void main()
{
_int64 i,t,m,q,j;
_int64 a[6];
_int64 b[12];
for(i=100000;i<=999999;i++)
{
t=i;
m=t%10;
q=0;
while(t>0)
{
a[q]=m;
t=(t-m)/10;
m=t%10;
q++;
}
if(a[0]!=a[1]&&a[0]!=a[2]&&a[0]!=a[3]&&a[0]!=a[4]&&a[0]!=a[5]&&a[1]!=a[2]&&a[1]!=a[3]&&a[1]!=a[4]&&a[1]!=a[5]&&a[2]!=a[3]&&a[2]!=a[4]&&a[2]!=a[5]&&a[3]!=a[4]&&a[3]!=a[5]&&a[4]!=a[5])
{
t=i*i;
m=t%10;
q=0;
while(t>0)
{
b[q]=m;
t=(t-m)/10;
m=t%10;
q++;
}
for(q=0;q<=5;q++)
{
for(j=0;j<=11;j++)
{
if(a[q]==b[j]) goto loop;
else if(a[q]!=b[j]) continue;
}
loop:if(q!=6 && j!=12)break;
}
if(q==6 && j==12) printf("%I64d----%I64d\n",i,i*i);
}
}
}