成功解决了一个看似不可能的问题~

Posted ziyang1060

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了成功解决了一个看似不可能的问题~相关的知识,希望对你有一定的参考价值。

技术图片

 

 这题第一次拿到手,一脸懵B。这。。这有什么规律嘛??感觉自己被难住了

仔细一看,发现它是从按照对角线轮回排布。

我又想起了之前所做的玩游戏的问题,发现这题也是类似。需要用到有限自动机模型

状态也就是方向,每进行一步,然后进行操作,之后改变一次方向。

 1 #include<stdio.h>
 2 void creatSnake(int a[][105],int size);
 3 void outputArray(int a[][105],int size);
 4 
 5 int main(void)
 6 {
 7     int n;
 8     int arr[105][105];
 9 
10     scanf("%d",&n);
11     creatSnake(arr,n);
12     outputArray(arr,n);
13 
14     return 0;
15 }
16 void creatSnake(int arr[][105],int size)
17 {
18     int dir=1;//1表示下,2表示斜上,3表示右,4表示斜下
19     int k;
20     int i=0,j=0;
21     arr[i][j]=1;
22     for(k=1;k<=size*size-1;k++)
23     {
24         switch(dir)
25         {
26             case 1:
27             {
28                 arr[i+1][j]=arr[i][j]+1;
29                 i=i+1;
30                 if(j==0) dir=2;
31                 if(j==size-1) dir=4;
32                 break;
33             }
34             case 2:
35             {
36                 arr[i-1][j+1]=arr[i][j]+1;
37                 i=i-1;
38                 j=j+1;
39                 if(i==0&&j!=size-1) dir=3;
40                 else if(j==size-1) dir=1;
41                 else dir=2;
42                 break;
43             }
44             case 3:
45             {
46                 arr[i][j+1]=arr[i][j]+1;
47                 j=j+1;
48                 if(i==0) dir=4;
49                 if(i==size-1) dir=2;
50                 break;
51             }
52             case 4:
53             {
54                 arr[i+1][j-1]=arr[i][j]+1;
55                 i=i+1;
56                 j=j-1;
57                 if(j==0&&i!=size-1) dir=1;
58                 else if(i==size-1) dir=3;
59                 else dir=4;
60                 break;
61             }
62         }
63     }
64 }
65 void outputArray(int a[][105],int size)
66 {
67     int i,j;
68     for(i=0;i<size;i++)
69     {
70         for(j=0;j<size;j++)
71         {
72             printf("%d",a[i][j]);
73             if(j==size-1) printf("
");
74             else printf(" ");
75         }
76     }
77 }

加油,Ziyang!

 

以上是关于成功解决了一个看似不可能的问题~的主要内容,如果未能解决你的问题,请参考以下文章

应用程序启动器 “sublime_text.desktop“ 还没有被标记为 信任。如果您不知道这个文件的来源,那么启动它可能会不安全。解决sublime在ubuntu中不支持中文输入问题。(代码片段

10 个你可能还不知道 VS Code 使用技巧

从 dbid 获取片段 ID

C++:当我添加看似无关的代码行时,分段错误消失了

dispatchTouchEvent 中看似不可能的 NullPointerException

执行代码时有时不显示对话框片段