?
这普及题太水了,你按照他给的条件来列判断语句。
按题目一步一步模拟
首先将1写在第一行的中间。
若K-1在第一行但不在最后一列,则将K填在最后一行,K-1所在列的右一列;
若K-1在最后一列但不在第一行,则将K填在第一列,K-1所在行的上一行;
若K-1在第一行最后一列,则将K填在K-1的正下方;
若K-1既不在第一行,也最后一列,如果K?1的右上方还未填数,则将K填在K?1的右上方,否则将L填在K-1的正下方
#include <stdio.h>
int main()
{
int arr[40][40]={0}, k = 1,x=0,y;
int n,s;
scanf("%d", &n);
int i,j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
arr[i][j] = 0;
}
s = n * n;
y = n / 2;
arr[x][y] = k;
k++;
while (k<=s)
{
if (x==0&&y!=n-1)//
{
x = n-1, y = y + 1;
arr[x][y] = k;
k++;
}
if (x!=0&&y==n-1)
{
x = x - 1, y = 0;
arr[x][y] = k;
k++;
}
if (x==0&&y==n-1)
{
x = x + 1;
arr[x][y] = k;
k++;
}
if (x!=0&&y!=n-1&&arr[x-1][y+1]==0)
{
x = x - 1, y = y +1;
arr[x][y] = k;
k++;
}
if (x != 0 && y != n-1&& arr[x - 1][y + 1] != 0)
{
x = x + 1;
arr[x][y] = k;
k++;
}
}
for ( i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf("%d ", arr[i][j]);
printf("\n");
}
return 0;
}
?