10阶以内的2k+1阶,4k阶,4k+2阶幻方输出c语言
时间: 2024-01-13 15:02:34 浏览: 25
幻方是一个由一组数字组成的正方形矩阵,在该矩阵中每行、每列和对角线上的所有数字之和都相等。下面是10阶以内的2k+1阶,4k阶,4k+2阶幻方的C语言实现:
2k+1阶幻方:
```c
#include <stdio.h>
int main() {
int n;
printf("Enter the order of magic square (odd number): ");
scanf("%d", &n);
int magicSquare[n][n];
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
magicSquare[i][j] = 0;
}
}
int num = 1;
i = 0, j = n / 2;
while (num <= n * n) {
if (i == -1 && j == n) {
j = n - 2;
i = 1;
} else {
if (j == n) {
j = 0;
}
if (i < 0) {
i = n - 1;
}
}
if (magicSquare[i][j]) {
j -= 2;
i++;
continue;
} else {
magicSquare[i][j] = num++;
}
j++;
i--;
}
printf("The magic square for %d:\n\n", n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%3d ", magicSquare[i][j]);
}
printf("\n");
}
return 0;
}
```
4k阶幻方:
```c
#include <stdio.h>
int main() {
int n;
printf("Enter the order of magic square (multiple of 4): ");
scanf("%d", &n);
int magicSquare[n][n];
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
magicSquare[i][j] = 0;
}
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (i % 4 == j % 4 || i % 4 + j % 4 == 3) {
magicSquare[i][j] = (n * i) + j + 1;
} else {
magicSquare[i][j] = n * n - (n * i) - j;
}
}
}
printf("The magic square for %d:\n\n", n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%3d ", magicSquare[i][j]);
}
printf("\n");
}
return 0;
}
```
4k+2阶幻方:
```c
#include <stdio.h>
int main() {
int n;
printf("Enter the order of magic square (multiple of 4 plus 2): ");
scanf("%d", &n);
int magicSquare[n][n];
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
magicSquare[i][j] = 0;
}
}
int x = n / 2;
int y = n - 1;
int num = 1;
while (num <= n * n) {
if (x == -1 && y == n) {
y = n - 2;
x = 0;
} else {
if (y == n) {
y = 0;
}
if (x < 0) {
x = n - 1;
}
}
if (magicSquare[x][y]) {
y -= 2;
x++;
continue;
} else {
magicSquare[x][y] = num++;
}
x--;
y++;
}
i = 0, j = n / 2;
while (j >= 0) {
for (int k = 0; k < n; k++) {
if (magicSquare[k][j]) {
continue;
}
magicSquare[k][j] = num++;
}
j -= 2;
}
j = n - 1, i = n / 2 + 1;
while (i < n) {
for (int k = 0; k < n; k++) {
if (magicSquare[k][j]) {
continue;
}
magicSquare[k][j] = num++;
}
j -= 2;
i++;
}
printf("The magic square for %d:\n\n", n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%3d ", magicSquare[i][j]);
}
printf("\n");
}
return 0;
}
```
请注意,在输入幻方的阶数时,必须确保它符合相应的规则,否则将导致代码出现错误。