gpt4 book ai didi

检查我的矩阵是否是幻方

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:11 24 4
gpt4 key购买 nike

所以我有这个矩阵:

8       1       6

3 5 7

4 9 2

现在我想检查这是否是一个“幻方”。这意味着所有行、列和斜线的总和分别相等(此处值为 15)。

所以因为我想尽可能高效地做到这一点并且我需要先打印我的矩阵,所以我想在同一个函数中进行所有值检查:

void printmatrix(int *mat, int dimension) {

int i, j, rowscount, colcount;
int firstvalue = 0;
int ismagicsquaere = 0;
for (i = 0; i < dimension; i++)
{
rowscount = 0;
for (j = 0; j < dimension; j++)
{
int num = *(mat + i * dimension + j);

if (i == 0)
firstvalue += num;
else
rowscount += num;

printf("%d\t", num);
}

if (rowscount != firstvalue)
ismagicsquaere = 0;

printf("\n\n");
}

目前我的函数只检查行值。不知道是否也可以检查柱子和斜线?

最佳答案

在嵌套的 for 循环中做所有事情是一个有趣的问题。

唯一的小挑战是还要计算的总和,因为按照循环的编写方式,一开始看起来数组[维度]应该是必要的。

然而,一个小技巧是有帮助的。这一行获取一行值

int rownum = *(mat + i * dimension + j);

也可以通过反转 ij

来获取 col 值
int colnum = *(mat + j * dimension + i);

允许在同一位置对列求和(矩阵是正方形!)

void printmatrix(int *mat, int dimension) {

int i, j;
int magic=1; // default to "is magic"
int d1=0,d2=0,refcount=0; // diag1, diag2

for (i = 0 ; i < dimension; i++) {
int rowcount = 0;
int colcount = 0;
for (j = 0; j < dimension; j++) {
int num = *(mat + i * dimension + j);
rowcount += num; // row sum
if (i == j) d1 += num; // diag1 sum
if (i == dimension-j-1) d2 += num; // diag2 sum
// row to col ...
colcount += *(mat + j * dimension + i); // col sum
}
if (!i) refcount = rowcount; // first rowcount is reference
else if (refcount != rowcount) magic = 0;
if (refcount != colcount) magic = 0;
}
if (d1 != refcount || d2 != refcount) magic = 0;
printf("Is Magic: %s\n", magic ? "Yes":"No");
}

关于检查我的矩阵是否是幻方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47555212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com