#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0,n,t,j,k,m,x = 1,cnt,flag;
char ch;
scanf("%d",&n);
m = n * n;
//int a[n][n] = {0,0};
int a[39][39] = {0,0};
j = n / 2;
a[i][j] = x;
for(k = 1;k < m;++k){
++x;
cnt = 0;
flag = 1;
if(flag == 1)
for(t = 0;t < n - 1;++t){
if(a[0][t] == (x - 1)){
i = n - 1;
j++;
a[i][j] = x;
flag = 0;
// printf("sss");
break;
}
}//printf("%d %d %d %d\n",a[i][j],x,i,j);
if(flag == 1)
for(t = 1;t < n;++t){
if(a[t][n - 1] == x - 1){
i--;
j = 0;
a[i][j] = x;
// printf("%d ",a[i][j]);
flag = 0;
break;
}
}
if(flag == 1)
if(a[0][n - 1] == x - 1){
i++;
j = n - 1;
a[i][j] = x;
flag = 0;
// printf("%d ",a[i][j]);
}
if(flag == 1){
for(t = 0;t < n;++t){
if(a[0][t] == x - 1){
cnt++;
break;
}
}
for(t = 0;t < n;++t){
if(a[t][n - 1] == x - 1){
cnt++;
break;
}
}
if(cnt == 0 && a[i - 1][j + 1] == 0){
i--;
j++;
a[i][j] = x;
// printf("%d ",a[i][j]);
}
else if(cnt == 0 && a[i - 1][j + 1] != 0){
i++;
a[i][j] = x;
// printf("%d ",a[i][j]);
}
}
}
// printf("%d",k);
for(i = 0;i < n;i++){
for(j = 0;j < n;j++){
printf("%d",a[i][j]);
printf("%c",ch = (j == n - 1) ? '\n' : ' ');
}
}
return 0;
}
二维数组不断赋值
思路不难
for(t = 0;t < n - 1;++t);{}
多打了一个分号,恰好这个地方不会报错,多花了50多分钟。
博客内容讲述了在解决洛谷P2615问题时,涉及二维数组赋值的思路和一个易错点——代码中多了一个分号,导致额外花费了50多分钟的问题分析。
1031

被折叠的 条评论
为什么被折叠?



