鱼C论坛

 找回密码
 立即注册
查看: 583|回复: 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
  1. #include <stdio.h>

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

  8.     int matrix[N][N];
  9.     for (i = 0; i<N; i++){  //初始化matrix
  10.         for (j = 0; j<N; j++){
  11.             matrix[i][j] = 0;
  12.         }
  13.     }

  14.     matrix[0][N/2] = 1;
  15.     m = 0; n = N/2;
  16.     for (i = 2; i<= N*N; i++){
  17.         s = m - 1;
  18.         t = n + 1;
  19.         if (s < 0){
  20.             s = N-1;
  21.         }
  22.         else if (s >= N)
  23.         {
  24.             s = 0;
  25.         }
  26.         
  27.         if (t < 0 ){
  28.             t = N-1;
  29.         }
  30.         else if (t >= N){
  31.             t = 0;
  32.         }

  33.         if ((matrix[s][t] != 0) || (s == 0 && t == N-1 && matrix[s][t] != 0)){
  34.             s = m+1; t = n;
  35.             matrix[s][t] = i;
  36.         }
  37.         else{
  38.             matrix[s][t] = i;
  39.         }

  40.         m = s; n = t;
  41.         
  42.     }

  43.     printf("%d阶幻方为:\n",N);
  44.     for (i = 0; i<N; i++){
  45.         for (j = 0; j<N; j++){
  46.             printf("%d\t",matrix[i][j]);
  47.         }
  48.         printf("\n");
  49.     }
  50.     return 0;
  51. }
复制代码

希望能有帮助

最佳答案

查看完整内容

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

使用道具 举报

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

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

  8.     int matrix[N][N];
  9.     for (i = 0; i<N; i++){  //初始化matrix
  10.         for (j = 0; j<N; j++){
  11.             matrix[i][j] = 0;
  12.         }
  13.     }

  14.     matrix[0][N/2] = 1;
  15.     m = 0; n = N/2;
  16.     for (i = 2; i<= N*N; i++){
  17.         s = m - 1;
  18.         t = n + 1;
  19.         if (s < 0){
  20.             s = N-1;
  21.         }
  22.         else if (s >= N)
  23.         {
  24.             s = 0;
  25.         }
  26.         
  27.         if (t < 0 ){
  28.             t = N-1;
  29.         }
  30.         else if (t >= N){
  31.             t = 0;
  32.         }

  33.         if ((matrix[s][t] != 0) || (s == 0 && t == N-1 && matrix[s][t] != 0)){
  34.             s = m+1; t = n;
  35.             matrix[s][t] = i;
  36.         }
  37.         else{
  38.             matrix[s][t] = i;
  39.         }

  40.         m = s; n = t;
  41.         
  42.     }

  43.     printf("%d阶幻方为:\n",N);
  44.     for (i = 0; i<N; i++){
  45.         for (j = 0; j<N; j++){
  46.             printf("%d\t",matrix[i][j]);
  47.         }
  48.         printf("\n");
  49.     }
  50.     return 0;
  51. }
复制代码

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

使用道具 举报

发表于 2023-12-11 20:26:25 | 显示全部楼层
根据题目描述,我们需要按照规则生成N阶幻方。下面是一个可行的实现方式:
  1. def generate_magic_square(n):
  2.     if n % 2 == 0:
  3.         print("请输入一个奇数!")
  4.         return
  5.    
  6.     # 初始化幻方数组
  7.     magic_square = [[0 for _ in range(n)] for _ in range(n)]
  8.    
  9.     # 初始位置
  10.     row, col = 0, n // 2
  11.    
  12.     # 填充幻方数组
  13.     for num in range(1, n * n + 1):
  14.         magic_square[row][col] = num
  15.         
  16.         # 下一个位置
  17.         row -= 1
  18.         col += 1
  19.         
  20.         # 超出矩阵范围,回绕
  21.         if row < 0:
  22.             row = n - 1
  23.         if col >= n:
  24.             col = 0
  25.         
  26.         # 如果当前位置已经有数,则放在上一个数的下面
  27.         if magic_square[row][col] != 0:
  28.             row += 1
  29.             col -= 1
  30.             
  31.             # 超出矩阵范围,回绕
  32.             if row >= n:
  33.                 row = 0
  34.             if col < 0:
  35.                 col = n - 1
  36.    
  37.     # 打印幻方
  38.     for row in magic_square:
  39.         print(" ".join([str(num) for num in row]))
  40. n = int(input("请输入一个正奇数N:"))
  41. 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-4-28 22:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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