Manchester


私信TA

用户名:wenyajie

访问量:313283

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 62813
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:
1.用一维数组代替二维数组;

2.设Length为二维数组中每行的长度;

3.对应一维数组长度为pow(Length,2);

4.设i代表行数,从1开始;(也可以从0开始,但下面关系式要变)

5.则主对角线上的元素对应在一维数组中的下标与i的关系为:(i-1)*Length+i-1 -------> (Length+1)*(i-1)

6.则副对角线上的元素对应在一维数组中的下标与i的关系为:Length+((i-1)*(Length-1))-1------> i*Length-i---->i*(Length-1)


4          

1    2    3      i=1

5    6    7    8   i=2

9   10 11 12   i=3

13 14 15 16   i=4

3

1    2    3    i=1

4    5    6    i=2

7    8    9    i=3

对于行数为奇数的二维数组,主,副对角线相交的元素,加了两遍,最后要减去;

参考代码:

#include <stdio.h>
#include <malloc.h>
#include <math.h>
int main()
{
    int    *Matrix;                    //一维数组
    int    Length, Sum = 0;            //二维数组宽度,和
    scanf( "%d", &Length );

    Matrix = (int *) malloc( pow( Length, 2 ) * sizeof(int) );//分配空间长度pow(Length,2)

    for ( int i = 0; i < pow( Length, 2 ); i++ )           //输入矩阵
        scanf( "%d", &Matrix[i] );

    for ( int i = 1; i <= Length; i++ )
        Sum += ( (Matrix[(i-1)*(Length+1)]) +(Matrix[i*(Length-1)])); //求和
    if ( Length % 2 != 0 )
        printf( "%d", Sum - Matrix[2 * Length - 2] ); //Length为奇数减去主副对角共有元素输出
    else
        printf( "%d", Sum );           //Length为偶数直接输出 
    return(0);
}

别忘点赞哦-.-

 

0.0分

13 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

不用free吗
2019-03-18 15:32:50
  • «
  • 1
  • »