题目:1~9九个数字只能用一次填进九个空,使得 ? ?×? ? ?=? ? ? ?
首先说说我的思路吧。由题意可知由两位数X三位数=四位数。我们可以从1000~9999开始枚举
四位数,又因为四位数各位数字均不相等故可以从1234~9876开始枚举。
然后再从12~98开始枚举,利用整除的的条件判断,得出三位数,再判断各位数字是否相同。
判断所枚举的数的各位数字是否相同。可以用一个整型数组IsUsed[10]来表示。
具体实现如下。PS(前几天的那个代码写错了现在重新改写了⊙﹏⊙b汗)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <time.h>
int IsUsed[10];
int IsAppeared(int k, int n)
{
int i;
for (i = 0; i<k; i++)
{
int v = n % 10;
n /= 10;
if (IsUsed[v])
return 0;
else
IsUsed[v] = 1;
}
return 1;
}
void JudgeNum()
{
int i, j, flag, flag1, flag2;
i = 1234;
while (i <= 9876)
{
flag = flag1 = flag2 = 1;
for (j = 12; j <= 98; j++)
{
if (i%j == 0)
{
memset(IsUsed, 0, sizeof(IsUsed));
flag = IsAppeared(4, i);
flag1 = IsAppeared(2, j);
flag2 = IsAppeared(3, i / j);
if (flag && flag1 && flag2 && !IsUsed[0])
{
printf("%d*%d=%d\n", j, i / j, i);
}
}
}
i++;
}
}
int main()
{
int a = clock();
JudgeNum();
int b = clock();
printf("%dms\n", b - a);
getchar();
return 0;
}
写的很烂,请见谅。。。