鱼C论坛

 找回密码
 立即注册
查看: 1289|回复: 6

[已解决]急急急

[复制链接]
发表于 2023-12-11 20:25:37 | 显示全部楼层 |阅读模式
20鱼币
任务描述
N阶幻方:所谓N阶幻方是指由1至N*N连续自然数组成的方阵,它的每一行、每一列和对角线之和均相等。
例如,7阶魔方阵为:
   30   39   48    1   10   19   28
   38   47    7    9   18   27   29
   46    6    8   17   26   35   37
    5   14   16   25   34   36   45
   13   15   24   33   42   44    4
   21   23   32   41   43    3   12
   22   31   40   49    2   11   20
N为奇数时,N幻方构造算法为:
⑴将1放在第一行中间一列;
⑵从2开始直到n×n为止各数依次按下列规则存放:按45°方向向右上行走,每一个数存放的行比前一个数的行数减1,列数加1。
⑶如果行列范围超出矩阵范围,则回绕。
⑷如果按上面规则确定的位置上已有数,则把下一个数放在上一个数的下面。
编程输出N阶幻方。

输入格式:
一个正奇数N,(0<N<20)。

输出格式:
输出N阶幻方,每个整数占5列。

输入样例:
7
输出样例:
   30   39   48    1   10   19   28
   38   47    7    9   18   27   29
   46    6    8   17   26   35   37
    5   14   16   25   34   36   45
   13   15   24   33   42   44    4
   21   23   32   41   43    3   12
   22   31   40   49    2   11   20
输入样例:
3
输出样例:
    8    1    6
    3    5    7
    4    9    2
用C语言,简单点
最佳答案
2023-12-11 20:25:38
#include <stdio.h>

int main(){
    int N;  //待输入的正奇数
    int i,j,m,n,s,t;
    
    printf("请输入一个正奇数:");
    scanf("%d",&N);

    int matrix[N][N];
    for (i = 0; i<N; i++){  //初始化matrix
        for (j = 0; j<N; j++){
            matrix[i][j] = 0;
        }
    }

    matrix[0][N/2] = 1;
    m = 0; n = N/2;
    for (i = 2; i<= N*N; i++){
        s = m - 1;
        t = n + 1;
        if (s < 0){
            s = N-1;
        }
        else if (s >= N)
        {
            s = 0;
        }
        
        if (t < 0 ){
            t = N-1;
        }
        else if (t >= N){
            t = 0;
        }

        if ((matrix[s][t] != 0) || (s == 0 && t == N-1 && matrix[s][t] != 0)){
            s = m+1; t = n;
            matrix[s][t] = i;
        }
        else{
            matrix[s][t] = i;
        }

        m = s; n = t;
        
    }

    printf("%d阶幻方为:\n",N);
    for (i = 0; i<N; i++){
        for (j = 0; j<N; j++){
            printf("%d\t",matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}
希望能有帮助

最佳答案

查看完整内容

希望能有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-11 20:25:38 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>

int main(){
    int N;  //待输入的正奇数
    int i,j,m,n,s,t;
    
    printf("请输入一个正奇数:");
    scanf("%d",&N);

    int matrix[N][N];
    for (i = 0; i<N; i++){  //初始化matrix
        for (j = 0; j<N; j++){
            matrix[i][j] = 0;
        }
    }

    matrix[0][N/2] = 1;
    m = 0; n = N/2;
    for (i = 2; i<= N*N; i++){
        s = m - 1;
        t = n + 1;
        if (s < 0){
            s = N-1;
        }
        else if (s >= N)
        {
            s = 0;
        }
        
        if (t < 0 ){
            t = N-1;
        }
        else if (t >= N){
            t = 0;
        }

        if ((matrix[s][t] != 0) || (s == 0 && t == N-1 && matrix[s][t] != 0)){
            s = m+1; t = n;
            matrix[s][t] = i;
        }
        else{
            matrix[s][t] = i;
        }

        m = s; n = t;
        
    }

    printf("%d阶幻方为:\n",N);
    for (i = 0; i<N; i++){
        for (j = 0; j<N; j++){
            printf("%d\t",matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}
希望能有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-11 20:26:25 | 显示全部楼层
根据题目描述,我们需要按照规则生成N阶幻方。下面是一个可行的实现方式:
def generate_magic_square(n):    if n % 2 == 0:        print("请输入一个奇数!")        return        # 初始化幻方数组    magic_square = [[0 for _ in range(n)] for _ in range(n)]        # 初始位置    row, col = 0, n // 2        # 填充幻方数组    for num in range(1, n * n + 1):        magic_square[row][col] = num                # 下一个位置        row -= 1        col += 1                # 超出矩阵范围,回绕        if row < 0:            row = n - 1        if col >= n:            col = 0                # 如果当前位置已经有数,则放在上一个数的下面        if magic_square[row][col] != 0:            row += 1            col -= 1                        # 超出矩阵范围,回绕            if row >= n:                row = 0            if col < 0:                col = n - 1        # 打印幻方    for row in magic_square:        print(" ".join([str(num) for num in row]))n = int(input("请输入一个正奇数N:"))generate_magic_square(n)
这段代码首先判断输入的N是否是奇数,如果是偶数则提示重新输入。接着初始化一个N*N的幻方数组,然后按照规则依次填充数组。最后打印出幻方。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-11 20:27:29 | 显示全部楼层
FishC 发表于 2023-12-11 20:26
根据题目描述,我们需要按照规则生成N阶幻方。下面是一个可行的实现方式:

能不能别来沾边儿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-11 20:27:43 | 显示全部楼层

非常抱歉,如果有任何问题需要帮助,请随时告诉我。我会尽力提供解答和帮助。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-11 20:54:39 | 显示全部楼层

能去看看我发的另一个叫help的帖子吗,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-17 01:12:07 | 显示全部楼层
王小二° 发表于 2023-12-11 20:54
能去看看我发的另一个叫help的帖子吗,谢谢

不好意思呢,回复晚了,现已给出解答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 13:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表