1 九数算式
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
void Swap(int* x, int* y)
{
int k = *x;
*x = *y;
*y = k;
}
int main()
{
int tmp = 0;
int num = 0;
int count = 0;
int kmp = 1;
for (int a = 1; a < 10; a++)
{
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
int a1 = arr[a];
Swap(&arr[a], &arr[9]);
for (int b = 1; b < 9; b++)
{
int b1 = arr[b];
Swap(&arr[b], &arr[8]);
for (int c = 1; c < 8; c++)
{
int c1 = arr[c];
Swap(&arr[c], &arr[7]);
for (int d = 1; d < 7; d++)
{
int d1 = arr[d];
Swap(&arr[d], &arr[6]);
for (int e = 1; e < 6; e++)
{
int e1 = arr[e];
Swap(&arr[e], &arr[5]);
for (int f = 1; f < 5; f++)
{
int f1 = arr[f];
Swap(&arr[f], &arr[4]);
for (int g = 1; g < 4; g++)
{
int g1 = arr[g];
Swap(&arr[g], &arr[3]);
for (int h = 1; h < 3; h++)
{
int h1 = arr[h];
Swap(&arr[h], &arr[2]);
for (int i = 1; i < 2; i++)
{
int i1 = arr[a];
count = (a1 * 1000 + b1 * 100 + c1 * 10 + d1 * 1) * (e1 * 10000 + f1 * 1000 + g1 * 100 + h1 * 10 + i1 * 1);
num = count / 100000000 % 10
+ count / 10000000 % 10
+ count / 1000000 % 10
+ count / 100000 % 10
+ count / 10000 % 10
+ count / 1000 % 10
+ count / 100 % 10
+ count / 10 % 10
+ count % 10;
kmp = (count / 100000000 % 10)
* (count / 10000000 % 10)
* (count / 1000000 % 10)
* (count / 100000 % 10)
* (count / 10000 % 10)
* (count / 1000 % 10)
* (count / 100 % 10)
* (count / 10 % 10)
* (count % 10);
if (num == 45)
{
if (kmp == 362880)
{
tmp++;
}
}
}
}
}
}
}
}
}
}
}
printf("%d\n", tmp);
return 0;
}
我的想法是暴力求解 假设只有 4个数 * 5个数的情况 ,kmp 乘积为362880 num 和为45 则满足
计算结果为292 个
但是正确答案为1625组,说明还有多种情况未考虑到,单纯的暴力求解无法解决
2 山