美文网首页
天花板编程手把手计划-第1期-第1天

天花板编程手把手计划-第1期-第1天

作者: 是公主啊 | 来源:发表于2017-04-21 00:17 被阅读0次

题目:

给出任意一个N*N的矩阵,将里面的数字按照从左上到右下有小到大排序,之后计算出新矩阵对角线上的数字总和(每个位置只参与一次计算)。例如:

145902-813936ab7b282e90.jpg

解题思路:

1.将N*N矩阵里的数据按一维数组输入 2.再按冒泡法进行排序 3.将一维数组转化为为二维数组(矩阵)4.分奇偶计算对角线之和

源码:

#include <stdio.h>

#define N 4

void main()
{
    int i,j,t,a[50],b[N][N],sum=0;
    
    //按一维数组输入
    printf("N=%d\n",N);
    printf("请输入N*N个数据:");
    for(i=0;i<N*N;i++)
        scanf("%d",&a[i]);
   
   //冒泡法排序
    for(i=1;i<N*N;i++)
    {
        for(j=0;j<N*N-i;j++)
        {
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    printf("排序后得数据为:");
    for(i=0;i<N*N;i++)
        printf(" %d",a[i]);
    printf("\n\n");

    //转化为二维数组
    printf("转化为矩阵为:\n");
    for(i=0;i<N*N;i++)
    {
        b[i/N][i%N]=a[i];
    }
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            printf("%3d",b[i][j]);
                
        }
        printf("\n");
    }

    //计算对角线之和
    for(i=0;i<N;i++)
        sum+=b[i][i]+b[i][N-1-i];
    if(N%2==1)
        sum-=b[N/2][N/2];
    printf("对角线之和为 %d\n",sum);
}

执行结果:

aa.jpg

总结:

提到排序,就只想到冒泡法(也只学了冒泡法),而冒泡法针对二维数组就比较麻烦(自己可能也不太会控制),就又把数据转化为一维再比较。
整体上觉得自己的方法很麻烦,更多排序方法有待提高。程序的简化也需要自己思考。

相关文章

网友评论

      本文标题:天花板编程手把手计划-第1期-第1天

      本文链接:https://www.haomeiwen.com/subject/dxerzttx.html