不是VIP会员,不能显示答案

题目解答

题目:
#include<iostream>
using namespacestd;
int main() {
int n, i, j, x, y, nx, ny;
int a[40][40];
for (i = 0; i< 40; i++)
for (j = 0; j< 40; j++)
a[i][j]= 0;
cin >> n;
y = 0;
x = n-1;
n = 2*n-1;
for (i = 1; i <= n*n; i++) {
a[y][x] =i;
ny = (y-1+n)%n;
nx = (x+1)%n;
if ((y == 0 && x == n-1)||a[ny][nx] !=0)
y= y+1;
else {
y = ny;
x = nx;
}
}
for (j = 0; j < n; j++)
cout << a[0][j]<< "";
cout << endl;
return 0;
}
输入: 3
输出:17 24 1 8 15
考点: 0
分析:
解答: 幻方…看出来的直接写,看不出来的按照它给的规则写:第一行中间是1,下一个数写在上一个数的右上面那个格(第一行的上一行是最后一行,最后一列的右面是第一列),如果右上面那个格已经填过就填它下面那个(能填右上填右上,填不了右上就填右面那个)
评论:
老师: 0