求解答c语言传说中的印度人能够驯服毒蛇(viper),并懂得吹奏乐器使蛇翩翩起舞.在小人书或者电视电影上看到蛇总喜欢盘旋成一个螺旋饼状.蛇越长,盘旋所得的饼越大.Input有多个测试用例,每个

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 23:40:05

求解答c语言传说中的印度人能够驯服毒蛇(viper),并懂得吹奏乐器使蛇翩翩起舞.在小人书或者电视电影上看到蛇总喜欢盘旋成一个螺旋饼状.蛇越长,盘旋所得的饼越大.Input有多个测试用例,每个
求解答c语言
传说中的印度人能够驯服毒蛇(viper),并懂得吹奏乐器使蛇翩翩起舞.在小人书或者电视电影上看到蛇总喜欢盘旋成一个螺旋饼状.蛇越长,盘旋所得的饼越大.
Input
有多个测试用例,每个用例一行.每个测试用例只有一个整数n( 0 < n < 100 ),表示蛇盘旋所得饼状图形的边长.最后一个用例n=-1,不用处理.
Output
输出n*n的盘旋数字矩阵.数字之间用一个空格分隔.每个测试用例的结果之间输出一个空行.
Sample Input
34-1
Sample Output
1 2 38 9 47 6 51 2 3 412 13 14 511 16 15 610 9 8 7
Author
John
请看后面的simple output.

求解答c语言传说中的印度人能够驯服毒蛇(viper),并懂得吹奏乐器使蛇翩翩起舞.在小人书或者电视电影上看到蛇总喜欢盘旋成一个螺旋饼状.蛇越长,盘旋所得的饼越大.Input有多个测试用例,每个
#include <stdlib.h>
#include <stdio.h>
#define BLANK -1
int matrix[128][128];
int N,N2;
void snake(int i,int j,char direction,int val){
     matrix[i][j]=val;
     if(val>=N2)
        return; 
     switch(direction){
       case 'R':
            if(j+1<N&&matrix[i][j+1]==BLANK){
              matrix[i][j+1]=val+1;
              snake(i,j+1,'R',val+1);
            }else{
              snake(i,j,'D',val);
            }
            break;
       case 'L':
            if(j>0&&matrix[i][j-1]==BLANK){
              matrix[i][j-1]=val+1;
              snake(i,j-1,'L',val+1);
            }else{
              snake(i,j,'U',val);
            }
            break;
       case 'U':
            if(i>0&&matrix[i-1][j]==BLANK){
              matrix[i-1][j]=val+1;
              snake(i-1,j,'U',val+1);
            }else{
              snake(i,j,'R',val);
            }
            break; 
       case 'D':
            if(i+1<N&&matrix[i+1][j]==BLANK){
              matrix[i+1][j]=val+1;
              snake(i+1,j,'D',val+1);
            }else{
              snake(i,j,'L',val);
            }
            break;
       default:
               printf("bad direction!\n");
     }
}
int main()
{
    int i,j;
    scanf("%d",&N);
    while(N!=-1){
      N2=N*N;
      for(i=0;i<N;i++){
        for(j=0;j<N;j++){
          matrix[i][j]=BLANK;
        }
      }
      matrix[0][0]=1;
      snake(0,0,'R',1);
      for(i=0;i<N;i++){
        for(j=0;j<N;j++){
          printf("%d",matrix[i][j]);
          if(j!=N-1)
            printf(" ");
        }
        printf("\n");
      }
      scanf("%d",&N);
    }
    return 0;
}