Acm 蛇形填数

#include<stdio.h>

int main(){
int snake[100][100];
int number;

scanf("%d",&number);
int number1=number+1;
int upright=0,downleft=0;
int one=1;
int spot=1;
int i,j;
while (spot<number*number+1){
i=number1;
j=number1;
if (upright==0 && downleft==0){
for (i=one;i<number1-one+1;i++){
snake[i][j-one]=spot;
spot++;
}
upright=0;
downleft=1;

}else if (upright==0 && downleft==1){
for(j=number-one;j>one-1;j--){
snake[i-one][j]=spot;
spot++;
}
upright=1;
downleft=0;
}else if (upright==1 && downleft==0){
for (i=number-one;i>one-1;i--){
snake[i][one]=spot;
spot++;
}
upright=1;
downleft=1;
}else if (upright==1 && downleft==1){
for (j=one+1;j<number1-one;j++){
snake[one][j]=spot;
spot++;
}
one++;
upright=0;
downleft=0;
} 
}

for (i=1;i<number1;i++){
for(j=1;j<number1;j++){
printf("%d\t",snake[i][j]);
}
printf("\n");
}
} 


主要通过 int upright,downleft;这两个参数来判断数字的行列变化,需要注意的地方就是已经写过数字的地方不能重复的在写数字,因此要注意snake数组的行列变化。

以上代码可以直接运行

猜你喜欢

转载自blog.csdn.net/Wolf_xujie/article/details/79073364