标准开头 菜 勿喷
即使题目比较简单 但是代码肯定有许多不足 还可以简化
重要的是其中判断i和i*i各位数是否有重复和i的各位数是否重复的方法
隐隐感觉会有更高效的方法 过后想出来会更新
#include <stdio.h>
#include <string.h>
int a[10];//装一个数的各位数
int b[10];//装平方数的各个位数
void f(long long int n)
{
//printf("%lld\n",n);
while(n)
{
a[n%10]=1;
n/=10;
}
}
void ff(long long int n)
{
//printf("%lld\n",n);
while(n)
{
b[n%10]=1;
n/=10;
}
}
int main()
{
for(long long int i=100000;i<1000000;i++)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));//两个数组每次都初始化
f(i);
ff(i*i);
int sum=0,flag=1;
for(int j=0;j<10;j++)
{
sum+=a[j];
}
if(sum!=6){
continue;
}//如果i不是六位数不同 跳过
sum=0;
for(int j=0;j<10;j++)
{
if(a[j]==b[j])
{
flag=0;
break;
}//如果i和i*i有某位相同 跳过
sum+=(a[j]+b[j]);
}
if(sum==10&&flag==1)printf("%lld %lld %d\n",i,i*i,sum);
//printf("%lld\n",i);
}
return 0;
}
来源:CSDN
作者:catrtees
链接:https://blog.csdn.net/catrtees/article/details/104353837