猜算式
ps:暴力枚举即可
代码:
#include<stdio.h>
#include<string.h>
int num[15];
int judge(int x)
{
while(x)
{
num[x%10]++;
if(num[x%10]>2)
return 0;
x/=10;
}
return 1;
}
int main()
{
int i,j;
for(i=100;i<=999;i++)
for(j=100;j<=999;j++)
{
memset(num,0,sizeof(num));
int a=i*(j%10);
int b=i*(j/10%10);
int c=i*(j/100%10);
int s=i*j;
if(a>999||b>999||c>999||a<100||b<100||c<100||s>99999||s<10000)
continue;
if(judge(a)&&judge(b)&&judge(c)&&judge(s)&&judge(i)&&judge(j))
printf("a=%d b=%d c=%d s=%d\n",a,b,c,s);
}
return 0;
}
总结:枚举也需要技巧,题目很明显是枚举两个数,而我刚开始一个一个枚举写了九重for循环,最后也不知道哪里有bug,就是输不出数
所以,枚举应该尽量少的枚举,可以适当加一些剪枝