【正经题解】神奇的幻方
2024-02-20 17:11:37
发布于:浙江
100阅读
0回复
0点赞
这题完全没必要很多的if语句,把幻方扩展开来,
题目的意思就是从第一行中点开始,把每一个下面的数
放到“右上角”,若右上角有数,则放到正下方。
#include<cstdio>
using namespace std;
int n,a[40][40],x,y;
int main(){
scanf("%d",&n);
x=1,y=(n+1)/2;
for(int i=1;i<=n*n;i++){
a[x][y]=i;
if(!a[(x-2+n)%n+1][y%n+1]) x=(x-2+n)%n+1,y=y%n+1;
else x=x%n+1;//数学运算
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
}
全部评论 1
#include <bits/stdc++.h> using namespace std; const long long N = 50; long long n; long long a[N][N]; int main( ) { cin >> n; long long x = 1; long long y = n / 2 + 1; for (int i = 1 ; i <= n * n ; i++) { a[x][y] = i; if (x == 1 && y == n) x++; else if(x == 1) x = n , y++; else if(y == n) x-- , y = 1; else if (a[x - 1][y + 1]) x++; else x-- , y++; } for (int i = 1 ; i <= n ; i++) { for (int j = 1 ; j <= n ; j++) { printf("%lld " , a[i][j]); } puts(""); } return 0; }
6天前 来自 福建
0
有帮助,赞一个