ACM_三角形蛇形矩阵

三角形蛇形矩阵

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

小铠觉得各类题型是要温故而知新的,所以他叫小发出一道类似做过的题。其实,一开始小发是拒绝的,但后来想了想,出些能坑别人的题也是人生的一大乐趣,何乐而不为。小发回顾了做过的题,灵机一闪,出了道三角形的蛇形矩阵。

Input:

输入包含多组测试数据,首先输入n(1<n<=20),代表n*n的三角形矩阵。

Output:

当n为奇数时,从1开始顺时针方向填入递增数据,并且在左下角输出三角形斜边的值之和m;当n为偶数时,从1开始逆时针方向填入递增数据,并且在右上角输出三角形斜边的值之和m。(注意数据间的空格和m的位置)
注意最后一个数字依然有空格,规则是数字加空格位数为4位,具体参考样例。

Sample Input:

4
5

Sample Output:

1           26
2   8   
3   9   10  
4   5   6   7   
1   2   3   4   5   
    10  11  12  6   
        15  13  7   
            14  8   
49              9
解题思路:水题!一直卡PE,最后发现原来当n为偶数时,除了右上角那个值后面不能有空格之外,其它情况每行输出的最后一个数字+空格共占4位,即最后一个数字的位数如果小于4,则后面需带(4-最后一个数字的位数)个空格。
AC代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     int n,m,i,j,border,a[25][25];
 5     while(~scanf("%d",&n)){
 6         memset(a,0,sizeof(a));m=1;//a数组清0
 7         if(n%2){//奇数
 8             for(int k=1;k<=(n+1)/2;++k){
 9                 i=j=k;border=n-k+1;
10                 while(j<=border){a[i][j]=m++;j++;}
11                 i++;j--;
12                 while(i<=border){a[i][j]=m++;i++;}
13             }
14             for(int k=1;k<=n;++k)a[n][1]+=a[k][k];
15             for(int k=1;k<=n;k++){
16                 for(int g=1;g<=n;++g){
17                     if(a[k][g]==0)printf("    ");
18                     else printf("%-4d",a[k][g]);
19                 }
20                 printf("\n");
21             }
22         }
23         else{//偶数
24             for(int k=1;k<=n/2;++k){
25                 i=j=k;border=n-k+1;
26                 while(i<=border){a[i][j]=m++;i++;}
27                 i--;j++;
28                 while(j<=border){a[i][j]=m++;j++;}
29             }
30             for(int k=1;k<=n;++k)a[1][n]+=a[k][k];
31             for(int g=1;g<=n;++g){
32                 if(a[1][g]==0)printf("    ");
33                 else{
34                     if(g!=n)printf("%-4d",a[1][g]);
35                     else printf("%d\n",a[1][g]);//n为偶数的时候右上角这个值后面不能有空格
36                 }
37             }
38             for(int k=2;k<=n;k++){
39                 for(int g=1;g<=k;++g)
40                     printf("%-4d",a[k][g]);//其余每行最后一个数字+空格共占4位
41                 printf("\n");
42             }
43         }
44     }
45     return 0;
46 }

猜你喜欢

转载自www.cnblogs.com/acgoto/p/9223050.html