检验并打印幻方矩阵。在下面的5×5阶幻方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将下面这个矩阵中的元素存储到一个二维整型数组中,然后检验其是否为幻方矩阵。

检验并打印幻方矩阵。在下面的5×5阶幻方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将下面这个矩阵中的元素存储到一个二维整型数组中,然后检验其是否为幻方矩阵,并将其按如下格式显示到屏幕上。

17	24	1	8	15
23	5	7	14	16
4	6	13	20	22
10	12	19	21	3
11	18	25	2	9



输出格式:
如果是幻方矩阵,输出提示信息: "It is a magic square!\n",并输出矩阵元素,输出格式为: "%4d"(换行使用"\n")
如果不是幻方矩阵,输出提示信息: "It is not a magic square!\n" (不输出矩阵元素)

#include <stdio.h>
#define N 5
int main()
{
    int a[N][N] = {{17, 24, 1, 8, 15},{23, 5, 7, 14, 16},{4, 6, 13, 20, 22},{10, 12, 19, 21, 3},{11, 18, 25, 2, 9}};
    int isMagic = 1;
    int h,s,x;
    int sumh[N],sums[N],diagSum1,diagSum2;
    for(h=0;h<N;h++)
    {
        sumh[h] = 0;
        for(s=0;s<N;s++)
        {
            sumh[h] = sumh[h] + a[h][s];
        }
    }
    for(s=0;s<N;s++)
    {
        sums[s] = 0;
        for(h=0;h<N;h++)
        {
            sums[s] = sums[s] + a[h][s];
        }
    }
    diagSum1 = 0;
    for(s=0;s<N;s++)
    {
        diagSum1 = diagSum1 + a[s][s];
    }
    diagSum2 = 0;
    for(s=0;s<N;s++)
    {
        diagSum2 = diagSum2 + a[s][N-1-s];
    }
    if(diagSum1!=diagSum2)
    {
        isMagic = 0;
    }
    else
    {
        for(h=0;h<N;h++)
        {
            if((sumh[h]!=diagSum1)||(sums[h]!=diagSum1))
                isMagic = 0;
        }
    }
    if(isMagic)
    {
        printf("It is a magic square!\n");
        for(h=0;h<N;h++)
        {
            for(s=0;s<N;s++)
            {
                printf("%4d",a[h][s]);
            }
            printf("\n");
        }
    }
    else
    {
        printf("It is not a magic square!\n");
    }
    return 0;
}

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 这是一个5*5矩阵,每一行、每一、每一对角线上的元素之和都是相等的。请编写程序将其读入一个二维整数组,并检验是否矩阵。最后按照以下格式显示到屏幕上: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 其,每个数字占据3个字符的宽度,数字与数字之间用空格隔开。 ### 回答2: 题目给出了一个5*5的矩阵,需要编写程序将其读入一个二维整数组,并检验是否矩阵,并将其按要求显示到屏幕上。 首先,我们需要读入这个矩阵。可以使用Java的Scanner类来实现: int[][] matrix = new int[5][5]; Scanner scanner = new Scanner(System.in); for(int i=0; i<5; i++){ for(int j=0; j<5; j++){ matrix[i][j] = scanner.nextInt(); } } 读入后,我们需要检验是否矩阵。可以分别计算每行、每、每对角线上的元素之和,并比较它们是否相等: //计算每行、每、每对角线上的元素之和 int[] rowSum = new int[5]; int[] colSum = new int[5]; int sum1 = 0; int sum2 = 0; for(int i=0; i<5; i++){ for(int j=0; j<5; j++){ rowSum[i] += matrix[i][j]; colSum[j] += matrix[i][j]; if(i == j){ sum1 += matrix[i][j]; } if(i+j == 4){ sum2 += matrix[i][j]; } } } //比较每行、每、每对角线上的元素之和是否相等 boolean isMagic = true; for(int i=0; i<5; i++){ if(rowSum[i] != colSum[i] || rowSum[i] != sum1 || rowSum[i] != sum2){ isMagic = false; break; } } 最后,我们将矩阵按照要求输出到屏幕上。可以使用Java的System.out.println()方法来输出: for(int i=0; i<5; i++){ for(int j=0; j<5; j++){ System.out.print(matrix[i][j] + " "); } System.out.print(rowSum[i]); System.out.println(); } for(int i=0; i<5; i++){ System.out.print(colSum[i] + " "); } System.out.print(sum1 + " " + sum2); System.out.println(); 完整代码如下: import java.util.Scanner; public class MagicSquare { public static void main(String[] args) { int[][] matrix = new int[5][5]; Scanner scanner = new Scanner(System.in); for(int i=0; i<5; i++){ for(int j=0; j<5; j++){ matrix[i][j] = scanner.nextInt(); } } int[] rowSum = new int[5]; int[] colSum = new int[5]; int sum1 = 0; int sum2 = 0; for(int i=0; i<5; i++){ for(int j=0; j<5; j++){ rowSum[i] += matrix[i][j]; colSum[j] += matrix[i][j]; if(i == j){ sum1 += matrix[i][j]; } if(i+j == 4){ sum2 += matrix[i][j]; } } } boolean isMagic = true; for(int i=0; i<5; i++){ if(rowSum[i] != colSum[i] || rowSum[i] != sum1 || rowSum[i] != sum2){ isMagic = false; break; } } if(isMagic){ for(int i=0; i<5; i++){ for(int j=0; j<5; j++){ System.out.print(matrix[i][j] + " "); } System.out.print(rowSum[i]); System.out.println(); } for(int i=0; i<5; i++){ System.out.print(colSum[i] + " "); } System.out.print(sum1 + " " + sum2); System.out.println(); } else { System.out.println("Not a magic square!"); } } } ### 回答3: 该题目可以通过编写程序进行求解。首先,声明一个大小为5*5的二维整数组,用于存储矩阵元素。然后,通过循环输入用户输入的每一个元素。输入完成后,再进行矩阵检验矩阵检验可以通过分别计算每一行、每一、每一对角线元素之和,来判断是否相等。可以通过编写for循环来进行计算,然后通过比较计算结果是否相等来判断是否矩阵。 最后,将矩阵按要求显示到屏幕上。可以通过for循环遍历二维数组的每一个元素,并用printf函数进行输出。输出时需要注意格式,每个元素之间需要加上空格并右对齐,每一行输出后需要换行。 需要注意的是,在编写程序时需要考虑输入元素的合法性,例如输入的字符类是否正确、输入的范围是否合理等等,以保证程序的正确性。 以下是程序的伪代码: 1.声明大小为5*5的二维整数组matrix 2.循环输入每个元素 a.输入matrix[i][j] 3.检验是否矩阵 a.计算每一行元素之和sum_row[i] b.计算每一元素之和sum_col[j] c.计算主对角线元素之和sum_main_diag d.计算副对角线元素之和sum_side_diag e.比较sum_row、sum_col、sum_main_diag、sum_side_diag是否相等 4.使用printf函数将矩阵按以下格式输出到屏幕上 a.每个元素用空格分隔并右对齐 b.每一行输出后换行

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那不勒斯的萤火丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值