算法提高 9-1九宫格
时间限制:1.0s 内存限制:256.0MB
问题描述
九宫格。输入1-9这9个数字的一种任意排序,构成3*3二维数组。如果每行、每列以及对角线之和都相等,打印1。否则打印0。
样例输出
与上面的样例输入对应的输出。
例:
例:

数据规模和约定
输入1-9这9个数字的一种任意排序。
方案一:
1 #include<stdio.h> 2 int main(){ 3 /*定义二维数组,并赋初值为0*/ 4 int a[3][3]; 5 /*录入A[m][s]*/ 6 for(int i=0;i<3;i++){ 7 for(int j=0;j<3;j++){ 8 scanf("%d",&a[i][j]); 9 } 10 } 11 // /*打印A[m][s]*/ 12 // for(int i=0;i<3;i++){ 13 // for(int j=0;j<3;j++){ 14 // printf("%d ",a[i][j]); 15 // } 16 // printf("\n"); 17 // } 18 int row1=0,row2=0,row3=0,pol1=0,pol2=0,pol3=0,Xie1=0,Xie2=0; 19 row1 = a[0][0]+a[0][1]+a[0][2]; 20 row2 = a[1][0]+a[1][1]+a[1][2]; 21 row3 = a[2][0]+a[2][1]+a[2][2]; 22 23 pol1 = a[0][0]+a[1][0]+a[2][0]; 24 pol2 = a[0][1]+a[1][1]+a[2][1]; 25 pol3 = a[0][2]+a[1][2]+a[2][2]; 26 27 Xie1 = a[0][0]+a[1][1]+a[2][2]; 28 Xie2 = a[0][2]+a[1][1]+a[2][0]; 29 // printf("%d, %d, %d, %d, %d, %d, %d, %d\n",row1,row2,row3,pol1,pol2,pol3,Xie1,Xie2); 30 for(int i=0;i<3;i++){ 31 if(row1 == row2 == row3 == pol1 == pol2 == pol3 == Xie1 == Xie2){ 32 printf("1"); 33 break; 34 }else{ 35 printf("0"); 36 break; 37 } 38 } 39 }
方案二:
1 #include<stdio.h> 2 int main(){ 3 int sum=0,k=0; 4 int s[100]={0};//结果数组,并赋初值为0 5 /*定义二维数组*/ 6 int a[3][3]; 7 int i,j; 8 /*录入A[m][s]*/ 9 for(i=0;i<3;i++){ 10 sum=0;//每输入一行时sum置为0 11 for(j=0;j<3;j++){ 12 scanf("%d",&a[i][j]); 13 sum = sum+a[i][j]; 14 } 15 s[k++] = sum;//每行的和 ,这个比较好理解 16 } 17 18 for(sum=0,i=0;i<3;i++){ 19 sum=0; 20 for(j=0;j<3;j++){ 21 sum+=a[j][i]; 22 } 23 s[k++] = sum;//每列的和 ,联想矩阵转置,也好理解 24 } 25 26 for(sum=0,i=0;i<3;i++) 27 sum+=a[i][i]; 28 s[k++] = sum;//主对角线元素和 29 30 s[k++] = a[0][2]+a[1][1]+a[2][0];//副对角线元素和 31 32 //类似于选择排序的遍历 33 bool flag=true; 34 for(i=0;i<k-1;i++){ 35 for(j=i+1;j<k;j++){ 36 if(s[i] != s[j]){ 37 flag=false;//不相等则flag为假 38 } 39 } 40 } 41 if(flag)//若flag真 42 printf("1"); 43 else 44 printf("0"); 45 return 0; 46 }