C语言 · 9-1九宫格

算法提高 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("
");
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
",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 }
 
原文地址:https://www.cnblogs.com/panweiwei/p/6284108.html