用枚举法输出如
## *## =####
#代表一个数字
要求用1到9组成式子且不重复,每个数字出现一次
自己打的代码
#include<stdio.h>
#include
int main(void)
{
long a = 10, b = 10, c = 10, d = 10;
int h[9] = { 0 }, i = 1, j = 1, num = 1;
for (a = 10;a < 100;a++)
{
for (b = 10;b < 100;b++)
{
for(c=10;c<100;c++)
{
for (d = 100;d<1000;d++)
{
if (a * b == c * d)
{
h[0] = a / 10;
h[1] = a % 10;
h[2] = b / 10;
h[3 ]= b % 10;
h[4] = c / 10;
h[5] = c % 10;
h[6 ]= d / 100;
h[7] = d % 100 / 10;
h[8] = d % 10;
for (i = 0;i < 9;i++)
{
if(h[i]==0)
{
num = 0;
continue;
}
for (j = i - 1;j < 9;j++)
{
if (h[i] == h[j])
num = 0;
else
continue;
}
}
if (num)
printf("%ld*%ld=%ld*%ld\n", a, b, c, d);
else
num = 1;
}
}
}
}
}
return 0;
}
不对,可能理解错误,没有
和 https://ask.csdn.net/questions/1053340 这个问题思路一样
稍微修改下
#include <stdio.h>
#include <string.h>
int judge(int* n)
{
int arr[10];
memset(arr, 0, sizeof(int) * 10);
for (int i = 0; i < 3; i++)
{
int n1 = n[i];
for (int j = 0; j < 4; j++)
{
arr[n1 % 10] = 1;
n1 /= 10;
}
}
for (int i = 1; i < 10; i++)
if (!arr[i]) return 0;
return 1;
}
int main()
{
for (int i = 123; i <= 987; i++)
for (int j = 12; j <= 98; j++)
{
if (i * j < 1234 || i * j > 9876) continue;
int arr[3];
arr[0] = i;
arr[1] = j;
arr[2] = i * j;
if (judge(arr)) printf("%d * %d = %d\n", arr[0], arr[1], arr[2]);
}
return 0;
}
138 * 42 = 5796
157 * 28 = 4396
159 * 48 = 7632
186 * 39 = 7254
198 * 27 = 5346
297 * 18 = 5346
483 * 12 = 5796
采纳