@[夏天禹](/user/253680) 我看看
by phil071128 @ 2020-08-25 15:18:18
@[夏天禹](/user/253680)
```cpp
for(int i1=0;i1<=3;i1++){
for(int i2=0;i2<=3;i2++){
for(int i3=0;i3<=3;i3++){
for(int i4=0;i4<=3;i4++){
for(int i5=0;i5<=3;i5++){
for(int i6=0;i6<=3;i6++){
for(int i7=0;i7<=3;i7++){
for(int i8=0;i8<=3;i8++){
for(int i9=0;i9<=3;i9++){
if((i1+i2+i4 )%4==(4-a[1]))
if((i1+i2+i3+i5 )%4== (4-a[2]))
if(( i6+i2+i3 )%4 == (4-a[3]))
if(( i1+i4+i7+i5 )%4 == (4-a[4]) )
if(( i3+i5+i9+i1+i7 )%4 == (4-a[5]))
if(( i3+i5+i9+i6 )%4== (4-a[6]))
if(( i7+i4+i8 )%4== (4-a[7]))
if(( i8+i5+i9+i7 )%4==(4-a[8]))
if(( i6+i8+i9 )%4== (4-a[9])){
b[1]=i1;
b[2]=i2;
b[3]=i3;
b[4]=i4;
b[5]=i5;
b[6]=i6;
b[7]=i7;
b[8]=i8;
b[9]=i9;
//忘用数组
for(int i=1;i<=9;i++){
for(int j=1;j<=b[i];j++){
cout<<i<<" ";
}
}
}
}
}
}
}
}
}
}
}
}
```
by phil071128 @ 2020-08-25 15:19:26
@[夏天禹](/user/253680) 建议您改用数组,不然有点乱,您看一下是不是最后i9的问题.
by phil071128 @ 2020-08-25 15:21:38
@[phil071128](/user/306734) 谢谢dalao,刚刚我忘记加for循环了。。。一个超级低级错误QAQ
by HackerDsg @ 2020-08-25 15:28:23
现在过了,蟹蟹orz
by HackerDsg @ 2020-08-25 15:28:56
@[夏天禹](/user/253680) 啊这,我发现我们做的题都好像(这道题我前天刚做了)
by phil071128 @ 2020-08-25 15:29:07
首先,按照你这个顺序找到的最小次数不一定是最小的……
其次,你没发现自己输出写错了吗?
不管i是啥都只输出一次?
by syf1201 @ 2020-08-25 15:33:30
建议递归优化码量
```c
#include<cstdio>
using namespace std;
const int mv[10][5]={{0,0,0,0,0},{0,1,2,4,5},{0,0,1,2,3},{0,2,3,5,6},{0,0,1,4,7},{2,4,5,6,8},{0,0,3,6,9},{0,4,5,7,8},{0,0,7,8,9},{0,5,6,8,9}};
int a[15],num[15];
bool flag;
bool check() {
for(int i=1; i<=9; i++) if(a[i]!=0) return 0;
return 1;
}
void write(int x) {
for(int i=1; i<9; i++)
for(int j=1; j<=num[i]; j++) printf("%d ",i);
for(int i=1; i<=x; i++) printf("9 ");
}
void dfs(int x,int y) {
if(y<0) return;
if(x==9) {
for(int j=0; j<5; j++) {
a[mv[9][j]]+=y;
a[mv[9][j]]%=4;
}
if(check()) {
flag=1;
write(y);
}
for(int j=0; j<5; j++) {
a[mv[9][j]]-=y-4;
a[mv[9][j]]%=4;
}
return;
}
for(int i=0; i<4; i++) {
num[x]=i;
for(int j=0; j<5; j++) {
a[mv[x][j]]+=i;
a[mv[x][j]]%=4;
}
dfs(x+1,y-i);
if(flag) return;
for(int j=0; j<5; j++) {
a[mv[x][j]]-=i-4;
a[mv[x][j]]%=4;
}
}
}
int main() {
for(int i=1; i<=9; i++) {
scanf("%d",&a[i]);
a[i]/=3;
}
for(int i=0; i<=27; i++) {
if(flag) continue;
dfs(1,i);
}
return 0;
}
```
by syf1201 @ 2020-08-25 15:58:45