using namespace std;
int const N=3;
bool equal(int M[N][N]);
int equal2(int M[N][N]);
int main(){
int M[N][N],k,p;
for(int a=1;a<=9;a++)
for(int b=1;b<=9;b++)
for(int c=1;c<=9;c++)
for(int d=1;d<=9;d++)
for(int e=1;e<=9;e++)
for(int f=1;f<=9;f++)
for(int g=1;g<=9;g++)
for(int h=1;h<=9;h++)
for(int i=1;i<=9;i++){
k=equal(M);
p=equal2(M);
if(k==0&&p==1){
for(int u=0;u<N;u++){
for(int w=0;w<N;w++)
cout<<M[u][w]<<'\0';
cout<<endl;
}
}
}
return 0;
}
bool equal(int M[N][N]){
for(int a=1;a<=9;a++)
for(int b=1;b<=9;b++)
for(int c=1;c<=9;c++)
for(int d=1;d<=9;d++)
for(int e=1;e<=9;e++)
for(int f=1;f<=9;f++)
for(int g=1;g<=9;g++)
for(int h=1;h<=9;h++)
for(int i=1;i<=9;i++){
M[0][0]=a,M[0][1]=b,M[0][2]=c,M[1][0]=d,M[1][1]=e,M[1][2]=f,M[2][0]=g,M[2][1]=h,M[2][2]=i;
if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&
a!=h&&a!=i&&b!=c&&b!=d&&b!=e&&b!=f&&
b!=g&&b!=h&&b!=i&&c!=d&&c!=e&&c!=f&&
c!=g&&c!=h&&c!=i&&d!=e&&d!=f&&d!=g&&
d!=h&&d!=i&&e!=f&&e!=g&&e!=h&&e!=i&&
f!=g&&f!=h&&f!=i&&g!=h&&g!=i&&h!=i)
return 0;
else
return 1;
}
int equal2(int M[N][N]){
int a=M[0][0]+M[0][1]+M[0][2];
int b=M[1][0]+M[1][1]+M[1][2];
int c=M[2][0]+M[2][1]+M[2][2];
int d=M[0][0]+M[1][0]+M[2][0];
int e=M[0][1]+M[1][1]+M[2][1];
int f=M[0][2]+M[1][2]+M[2][2];
int g=M[0][0]+M[1][1]+M[2][2];
int h=M[0][2]+M[1][1]+M[2][0];
if(a==b==c==d==e==f==g==h) return 1;
else return 0;
}
4 个解决方案
#2
#include <stdio.h>
int a[3][3] = {8, 1, 6, 3, 5, 7, 4, 9, 2};
int main(){
for(int i = 0; i < 3; ++i){
for(int j = 0; j < 3; ++j){
printf("%d ", a[i][j]);
}
putchar('\n');
}
return 0;
}
#3
刚论坛里有一个说,整个4阶的,求实现函数代码,不会就是你吧?
#4
不是我!能不能恢复些有效内容呢???
#1
给你找了个链接,里面有很多思路与解法,比LZ的暴力方式好的多哈,学习学习吧
http://bbs.csdn.net/topics/30172562
http://bbs.csdn.net/topics/30172562
#2
#include <stdio.h>
int a[3][3] = {8, 1, 6, 3, 5, 7, 4, 9, 2};
int main(){
for(int i = 0; i < 3; ++i){
for(int j = 0; j < 3; ++j){
printf("%d ", a[i][j]);
}
putchar('\n');
}
return 0;
}
#3
刚论坛里有一个说,整个4阶的,求实现函数代码,不会就是你吧?
#4
不是我!能不能恢复些有效内容呢???