想了很久思路不是很清晰,看了别人的题解才发现呃呃我真的是太蠢了,没想清楚枚举的主要原因是没想到一个钟波动4次就想当与没拨,因此一个选项最多出现四次。
可以是九层循环枚举代码如下
#include<iostream>
using namespace std;
int p[10], t[10];
int main()
{
for (int i = 1; i <= 9; i++) {
cin >> p[i];
}
int sum;
for (t[1] = 0; t[1] < 4; t[1]++) {
for (t[2] = 0; t[2] < 4; t[2]++) {
for (t[3] = 0; t[3] < 4; t[3]++) {
for (t[4] = 0; t[4] < 4; t[4]++) {
for (t[5] = 0; t[5] < 4; t[5]++) {
for (t[6] = 0; t[6] < 4; t[6]++) {
for (t[7] = 0; t[7] < 4; t[7]++) {
for (t[8] = 0; t[8] < 4; t[8]++) {
for (t[9] = 0; t[9] < 4; t[9]++) {
sum = 0;
sum += (p[1] + t[1] + t[2] + t[4]) % 4;
sum += (p[2] + t[1] + t[2] + t[3] + t[5]) % 4;
sum += (p[3] + t[2] + t[3] + t[6]) % 4;
sum += (p[4] + t[1] + t[4] + t[5] + t[7]) % 4;
sum += (p[5] + t[1] + t[3] + t[5] + t[7] + t[9]) % 4;
sum += (p[6] + t[3] + t[5] + t[6] + t[9]) % 4;
sum += (p[7] + t[4] + t[7] + t[8]) % 4;
sum += (p[8] + t[5] + t[7] + t[8] + t[9]) % 4;
sum += (p[9] + t[6] + t[8] + t[9]) % 4;
if (sum == 0) {
for (int j = 1; j <= 9; j++) {
while (t[j]--) {
cout << j << " ";
}
}
return 0;
}
}
}
}
}
}
}
}
}
}
}
看着很麻烦对吧实际上还能优化因为后面受前三个的影响所以代码可以如下
#include<iostream>
using namespace std;
int p[10], t[10];
int main()
{
int sum;
for (int i = 1; i <= 9; i++)
cin >> p[i];
for (t[1] = 0; t[1] < 4; t[1]++)
for (t[2] = 0; t[2] < 4; t[2]++)
for (t[3] = 0; t[3] < 4; t[3]++)
{
sum = 0;
t[4] = (4 - (p[1] + t[1] + t[2]) % 4) % 4;
t[5] = (4 - (p[2] + t[1] + t[2] + t[3]) % 4) % 4;
t[6] = (4 - (p[3] + t[2] + t[3]) % 4) % 4;
t[7] = (4 - (p[4] + t[1] + t[4] + t[5]) % 4) % 4;
t[9] = (4 - (p[6] + t[3] + t[5] + t[6]) % 4) % 4;
t[8] = (4 - (p[8] + t[5] + t[7] + t[9]) % 4) % 4;
sum += (p[1] + t[1] + t[2] + t[4]) % 4;
sum += (p[2] + t[1] + t[2] + t[3] + t[5]) % 4;
sum += (p[3] + t[2] + t[3] + t[6]) % 4;
sum += (p[4] + t[1] + t[4] + t[5] + t[7]) % 4;
sum += (p[5] + t[1] + t[3] + t[5] + t[7] + t[9]) % 4;
sum += (p[6] + t[3] + t[5] + t[6] + t[9]) % 4;
sum += (p[7] + t[4] + t[7] + t[8]) % 4;
sum += (p[8] + t[5] + t[7] + t[8] + t[9]) % 4;
sum += (p[9] + t[6] + t[8] + t[9]) % 4;
if (sum == 0) {
for (int i = 1; i <= 9; i++) {
while (t[i]--)
cout<<i<<" ";
}
return 0;
}
}
}
感觉这个思路确实很巧妙,学到了很多