日暮迟归 2022-10-28 07:51 采纳率: 75%
浏览 22
已结题

输出魔方阵,但是编码只能输出一个数字

#include <stdio.h>
#include <math.h>
int main(){
int n,b,t,i,j;
scanf("%d",&n);
t=pow(n,/2);
int a[t][t];
a[0][(t-1)/2]=1;
i=t-1;j=t-1;b=2;
a[i][j]=b;
for(b=2;b<=n;b++)
{if(i==0)
i=t-1;
a[i][j]=b+1;};
for(b=2;b<=n;b++)
{if(j=t-1)
j=0,i=i-1;
a[i][j]=b+1;};
for(b=2;b<n;b++)
{if(a[i-1][j+1]!=0||i==0,j==t)
{i=i-1;
a[i][j]=b+1;};};
for(b=2;b<=n;b++)
{if(i!=0&&j!=t-1&&a[i-1][j+1]==0)
i=i-1,j=j+1;
a[i][j]=b+1;};
for(i=0;i<=t-1;i++)
{for(j=0;j<=t-1;j++)
{printf("%d\t",a[i][j]);};
printf("\n");};

return 0;

}

  • 写回答

2条回答 默认 最新

  • 楠山若芸 新星创作者: C/C++技术领域 2022-10-28 07:53
    关注
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int a[15][15],n,i,j,k,;
        while (1){
            printf("请输入n(1~15):\n");
            scanf("%d",&n);
            if(n!=0&&n<=15&&n%2!=0)
    
                break;
            else{
                printf("请输入奇数\n");
                continue;
            }
    
        }
        for (i=1;i<=n;i++){
            for (j=1;j<=n;j++){
                a[i][j]=0;
            }
        }
        j=n/2+1;
        a[1][j]=1;
        i=1;
        for(k=2;k<=n*n;k++){
            i-=1;
            j+=1;
    
            if(i<1&&j>n){
                i+=2;
                j-=1;
            }
            else if(i<1){
                i=n;
            }else if(j>n){
                j=1;
            }
    
            if(a[i][j]==0){
                a[i][j]=k;
            }else{
                i+=2;
                j-=1;
    
                a[i][j]=k;
            }
        }
        for (i=1;i<=n;i++){
            for (j=1;j<=n;j++){
                printf("%5d",a[i][j]);
            }
            printf("\n");
        }
    
        return 0;
    }
    
    
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月28日
  • 创建了问题 10月28日