7-1右上方-幻方

**C语言-PTA习题-实现右上方**

输入格式:
n阶幻方是由前n×n个自然数组成的一个n阶方阵,其各行、各列及两条对角线所含的n个数的和相等。 现在请你用以下方法来构造名为“右上方”的n阶奇数幻方: 1:将1放在第一行中间一列; 2:从2开始直到n×n,各数依次按下列规则存放: ①每一个数存放在前一个数的右上方; ②如果行列范围超出矩阵范围,则回绕,例如1在第1行,则2应放在最后一行,列数同样加1; ③如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。 如果还是不太明白可参考样例。

输出格式:
对于每组数据,输出n阶幻方,每个数占4格,右对齐2 3 5

输入样例:
在这里给出一组输入。例如:
2
3
5
输出样例:
8 1 6
3 5 7
4 9 2
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
在这里插入图片描述
楼主尝试了很多方法,但是习题集都是判定的错的。
最后发现那个坑比的2原来是表示的可以输入组数(鸡肋),但是题目根本没有说…

以下是楼主的代码
代码:

#include<stdio.h>
int main()
{

    int n; 
    int NMSL;
	scanf("%d",&NMSL);
    while (NMSL--){ 
    scanf("%d",&n);
    if(n%2==0)
    ;
    else if(n%2!=0){
	
	int arr[n][n];  
	int i, j, k,I,J;
    I = 0;
    J = n / 2;
    for (i = 0;i < n;i++)
    for (j = 0;j < n;j++)
    arr[i][j] = 0;
    for (k = 1;k <=n*n;k++)
    {
        arr[I][J] = k;
		if((I-1)<0&&(J+1)<=(n-1))
		{
		I=n-1;
		J=J+1;
		}
		else if(((J+1)>(n-1))&&((I-1)>=0))
		{
        I=I-1;
		J=0;
        }
		else if((arr[I-1][J+1]!=0)||((I==0)&&(J==(n-1))))
		{
		I=I+1;
		}
		else
		{	I=I-1;
			J=J+1;
		}
    }  
    for (i = 0;i < n;i++)
    {
        for (j = 0;j < n;j++)
        {
            printf("%4d", arr[i][j]);
        }
        printf("\n");
    	}

}
}
    return 0;
}

真坑啊,因为测试点只有一个,又不告诉我错在哪里。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值