孵化器 软件第四周

Posted liumengyue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了孵化器 软件第四周相关的知识,希望对你有一定的参考价值。

1.设计一个老鼠走迷宫的程序,设定一个起点和一个终点,要求打印出所有的路线。 图的起点为(1,1),终点为(5,5)。

 

  1 #include <stdio.h>
  2 #include <time.h>
  3 #include <stdlib.h>
  4 
  5 int xx[5] = {1,-1,0,0};
  6 int yy[5] = {0,0,1,-1};
  7 int vis[12][12];
  8 int barrier[12][12];
  9 int x1, y3, x2, y2, cnt = 0,FLAG = 0;
 10 
 11 void Create(void);
 12 void dfs(int,int);
 13 void Print(void);
 14 
 15 int main()
 16 {
 17     Create();
 18     printf("输入起点和终点:
");
 19     scanf("%d%d%d%d",&x1, &y3, &x2, &y2);
 20     dfs(x1,y3);
 21     if (FLAG == 0)
 22         printf("无可达路径");
 23     return 0;
 24 }
 25 
 26 //作用:生成9X9的迷宫
 27 //入口参数:无
 28 //返回:无
 29 
 30 void Create(void)
 31 {
 32     int i, j;
 33     srand((unsigned int)time(0));
 34     printf("┏━━━━━━━━━━━━━━━━━━┓
");
 35     for (i = 1; i <= 9; i++)
 36     {
 37         printf("");
 38         for(j = 1; j <= 9; j++)
 39             if (rand()%2 == 0)
 40             {
 41                 barrier[i][j] = 1;
 42                 //printf("XX");
 43                 printf("██");
 44             }
 45             else
 46                 printf("  ");
 47         printf("");
 48     }
 49     printf("┗━━━━━━━━━━━━━━━━━━┛
");
 50 }
 51 
 52 //作用:搜索路线
 53 //入口参数:起点
 54 //返回:无
 55 
 56 void dfs(int x,int y)
 57 {
 58     int i;
 59     vis[x][y] = ++cnt;
 60     if (x == x2 && y == y2)
 61     {
 62         FLAG = 1;
 63         Print();
 64         vis[x][y] = 0;
 65         cnt --;
 66         return ;
 67     }
 68     for (i = 0; i < 4; i++)
 69         if (x+xx[i] > 0 && x+xx[i] <=9 && y+yy[i] > 0 && y+yy[i] <= 9)
 70             if (vis[x+xx[i]][y+yy[i]] == 0 && barrier[x+xx[i]][y+yy[i]] == 0)
 71             {
 72                 dfs(x+xx[i],y+yy[i]);
 73             }
 74     vis[x][y] = 0;
 75     cnt --;
 76 }
 77 
 78 //作用:输出可行路线
 79 //入口参数:无
 80 //返回:无
 81 
 82 void Print(void)
 83 {
 84     int i, j;
 85     printf("┏━━━━━━━━━━━━━━━━━━┓
");
 86     for (i = 1; i <= 9; i++)
 87     {
 88         printf("");
 89         for (j = 1; j <= 9; j++)
 90         {
 91             if (barrier[i][j])
 92                 printf("██");
 93             else
 94                 if (vis[i][j])
 95                     printf("%2d",vis[i][j]);
 96             else
 97                 printf("  ");
 98         }
 99         printf("");
100     }
101     printf("┗━━━━━━━━━━━━━━━━━━┛
");
102 }

 

2.编写万年历

(1)输入某一年的某个月份(如输入“2018.9”),输出当月的日期和星期对照表

(2)查询某年某月某日(如输入“2018.9.1”),输出该日期是星期几

(3)日期与星期对照表格式整齐,简单易懂

(4)附加:查询某年某月某日,出现农历日期。/可输出某一年的完整日历

提示:(1)已知 1900 年 1 月 1 日是星期一(2)闰年判定条件是:四年一闰、百年不 闰、四百年再闰。

 1 #include <stdio.h>
 2 
 3 int b[15] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
 4 int y,m,d;
 5 
 6 int Find(int, int, int);
 7 int Leapyear(int);
 8 void Print(int);
 9 
10 int main()
11 {
12     printf("打印日历,输入某年某个月份:
");
13     scanf("%d%d", &y, &m);
14     Print(Find(y,m,1));
15     printf("

查询某年某月某日是星期几,输入年,月,日:
");
16     scanf("%d%d%d",&y,&m,&d);
17     printf("%d",Find(y,m,d));
18     return 0;
19 }
20 
21 //作用:查找y年m月d日是星期几
22 //入口参数:年月日
23 //返回:这天是星期几
24 
25 int Find(int y,int m,int d)
26 {
27     int x = 0, i;
28     for (i = 1900; i < y; i++)
29     {
30         x += 365;
31         if (Leapyear(i))
32             x++;
33     }
34     for (i = 1; i < m; i ++)
35         x += b[i];
36     x += d-1;
37     if (Leapyear(y))
38     {
39         if (m > 2)
40             x++;
41         if (m == 2 && d == 29)
42             x ++;
43     }
44     return x%7+1;
45 }
46 
47 //作用:判断闰年
48 //入口参数:年份
49 //返回:1或0,代表该年是否为闰年
50 int Leapyear(int y)
51 {
52     if ((y%400 == 0) || ((y%4 == 0) && (y%100) != 0))
53         return 1;
54     return 0;
55 }
56 
57 //作用:打印某年某月日历
58 //入口参数:这个月第一天是星期几
59 //返回:无
60 
61 void Print(z)
62 {
63     int i,t = z;
64     printf("***********2018 9***********
");
65     printf("*****************************
");
66     printf(" Sun Mon Tur Wen Thu Fri Sat 
");
67     if (z != 7)
68         for (i = 1; i <= z; i++)
69             printf("    ");
70     for (i = 1; i <= b[m]; i++)
71     {
72         printf("%4d",i);
73         t++;
74         if (t%7 == 0)
75             printf("
");
76     }
77 }

 

3.小范学长很喜欢玩 2048 这个游戏,于是,小范学长有天想能不能自己也用 C 语言写一个 2048 的游戏,可是小范学长最近比较忙,没有时间去写相应的游戏代码,所以聪明的萌新 们能帮助小范学长实现他的愿望么?

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <time.h>
  4 
  5 int a[6][6];
  6 int FLAG = 0;
  7 
  8 void Create(void);
  9 void Print(void);
 10 void comb(int, int, int, int);
 11 int Move(char);
 12 int Lmove(int);
 13 int Rmove(int);
 14 int Umove(int);
 15 int Dmove(int);
 16 int Check(void);
 17 
 18 int main()
 19 {
 20     a[0][0] = a[0][1] = a[0][2] = a[0][3] = a[0][4] = a[0][5] = 1;
 21     a[5][0] = a[5][1] = a[5][2] = a[5][3] = a[5][4] = a[5][5] = 1;
 22     a[1][0] = a[2][0] = a[3][0] = a[4][0] = 1;
 23     a[1][5] = a[2][5] = a[3][5] = a[4][5] = 1;
 24     
 25     char direction;
 26     Create();
 27     Print();
 28     while (1)
 29     {
 30         scanf("%c", &direction);
 31         getchar();
 32         if(Move(direction))
 33         {
 34             if (FLAG == 1)
 35             {
 36                 printf("WIN");
 37                 break;
 38             }
 39             Create();
 40             //system("cls");
 41             Print();
 42         }
 43         else
 44         if (Check() == 1)
 45             printf("LOSE");
 46     }
 47     return 0;
 48 }
 49 
 50 //作用:随机在矩阵空余处生成2或4
 51 //入口参数:无
 52 //返回:0代表创建成功,1代表创建失败。
 53 void Create(void)
 54 {
 55     int i, j, flag = 0;
 56     srand((unsigned)time(0));
 57     while (1)
 58     {
 59         if (flag == 1)
 60             break;
 61         i = rand()%4 + 1;
 62         j = rand()%4 + 1;
 63         if (a[i][j] == 0)
 64         {
 65             if (rand()%2 == 0)
 66                 a[i][j] = 2;
 67             else
 68                 a[i][j] = 4;
 69             flag = 1;
 70         }
 71     }
 72 }
 73 //作用:打印矩阵
 74 //入口参数:无
 75 //返回:无
 76 void Print(void)
 77 {
 78     int i, j;
 79     //system("cls");
 80     printf("┏━━━━┳━━━━┳━━━━┳━━━━┓
");
 81     for (i = 1; i <= 4; i++)
 82     {
 83         for (j = 1; j <= 4; j++)
 84         {
 85             if (a[i][j] != 0)
 86                 printf("│%4d",a[i][j]);
 87             else
 88                 printf("");
 89         }
 90         if (i != 4)
 91             printf("│
┣━━━━╋━━━━╋━━━━╋━━━━┫
");
 92     }
 93     printf("│
┗━━━━┻━━━━┻━━━━┻━━━━┛
");
 94 }
 95 
 96 //作用:四方向合并移动
 97 //入口参数:移动方向
 98 //返回:是否能够合并,0代表无法合并,1代表可以合并
 99 
100 int Move(char c)
101 {
102     if (c == a)
103         return (Lmove(1)+Lmove(2)+Lmove(3)+Lmove(4));
104     if (c == d)
105         return (Rmove(1)+Rmove(2)+Rmove(3)+Rmove(4));
106     if (c == w)
107         return (Umove(1)+Umove(2)+Umove(3)+Umove(4));
108     if (c == s)
109         return (Dmove(1)+Dmove(2)+Dmove(3)+Dmove(4));
110     return 0;
111 }
112 
113 //作用:左合并 左移第i行
114 //入口参数:变量i
115 //返回:是否能够合并,0代表无法合并,1代表可以合并
116 
117 int Lmove(int i)
118 {
119     
120     int cnt = 0,j,flag = 0;
121     //左移第i行
122     for (j = 1; j <= 4; j++)
123         if (a[i][j] != 0)
124         {
125             if (a[i][j-1] == 0)
126                 flag = 1;
127             a[i][++cnt] = a[i][j];
128             if (cnt != j)
129                 a[i][j] = 0;
130         }
131     //左合并第i行
132     if (a[i][1] == a[i][2] &&a[i][1] != 0)
133     {
134         comb(i,1,i,2); flag = 1;
135     }
136     if (a[i][2] == a[i][3] && a[i][2] != 0)
137     {
138         comb(i,2,i,3); flag = 1;
139     }
140     if (a[i][3] == a[i][4] && a[i][3] != 0)
141     {
142         comb(i,3,i,4); flag = 1;
143     }
144     cnt = 0;
145     //左移第i行
146     for (j = 1; j <= 4; j++)
147         if (a[i][j] != 0)
148         {
149             a[i][++cnt] = a[i][j];
150             if (cnt != j)
151                 a[i][j] = 0;
152         }
153     return flag;
154 }
155 
156 
157 //作用:右合并 右移第i行
158 //入口参数:变量i
159 //返回:是否能够合并,0代表无法合并,1代表可以合并
160 
161 int Rmove(int i)
162 {
163     
164     int cnt = 5,j, flag = 0;
165     //右移第i行
166     for (j = 4; j >= 1; j--)
167         if (a[i][j] != 0)
168         {
169             if (a[i][j+1] == 0)
170                 flag = 1;
171             a[i][--cnt] = a[i][j];
172             if (cnt != j)
173                 a[i][j] = 0;
174         }
175     //右合并第i行
176     if (a[i][4] == a[i][3] && a[i][4] != 0)
177     {
178         comb(i,4,i,3);  flag = 1;
179     }
180     if (a[i][3] == a[i][2] && a[i][3] != 0)
181     {
182         comb(i,3,i,2);  flag = 1;
183     }
184     if (a[i][2] == a[i][1] && a[i][2] != 0)
185     {
186         comb(i,2,i,1);  flag = 1;
187     }
188     cnt = 5;
189     //右移第i行
190     for (j = 4; j >= 1; j--)
191         if (a[i][j] != 0)
192         {
193             a[i][--cnt] = a[i][j];
194             if (cnt != j)
195                 a[i][j] = 0;
196         }
197     return flag;
198 }
199 
200 
201 
202 //作用:上合并 上移第j列
203 //入口参数:变量j
204 //返回:是否能够合并,0代表无法合并,1代表可以合并
205 
206 int Umove(int j)
207 {
208     
209     int cnt = 0, i, flag = 0;
210     //上移第j列
211     for (i = 1; i <= 4; i++)
212         if (a[i][j] != 0)
213         {
214             if (a[i-1][j] == 0)
215                 flag = 1;
216             a[++cnt][j] = a[i][j];
217             if (cnt != i)
218                 a[i][j] = 0;
219         }
220     //上合并第j列
221     if (a[1][j] == a[2][j] && a[1][j] != 0)
222     {
223         comb(1,j,2,j);  flag = 1;
224     }
225     if (a[2][j] == a[3][j] && a[2][j] != 0)
226     {
227         comb(2,j,3,j);  flag = 1;
228     }
229     if (a[3][j] == a[4][j] && a[3][j] != 0)
230     {
231         comb(3,j,4,j);  flag = 1;
232     }
233     cnt = 0;
234     //上移第j列
235     for (i = 1; i <= 4; i++)
236         if (a[i][j] != 0)
237         {
238             a[++cnt][j] = a[i][j];
239             if (cnt != i)
240                 a[i][j] = 0;
241         }
242     return flag;
243 }
244 
245 
246 
247 
248 
249 //作用:下合并 下移第j列
250 //入口参数:变量j
251 //返回:是否能够合并,0代表无法合并,1代表可以合并
252 
253 int Dmove(int j)
254 {
255     
256     int cnt = 5, i, flag = 0;
257     //下移第j列
258     for (i = 4; i >= 1; i--)
259         if (a[i][j] != 0)
260         {
261             if (a[i+1][j] == 0)
262                 flag = 1;
263             a[--cnt][j] = a[i][j];
264             if (cnt != i)
265                 a[i][j] = 0;
266         }
267     //下合并第j列
268     if (a[4][j] == a[3][j] && a[4][j] != 0)
269     {
270         comb(4,j,3,j);
271         flag = 1;
272     }
273     if (a[3][j] == a[2][j] && a[3][j] != 0)
274     {
275         comb(3,j,2,j);
276         flag = 1;
277     }
278     if (a[2][j] == a[1][j] && a[2][j] != 0)
279     {
280         comb(2,j,1,j);
281         flag = 1;
282     }
283     cnt = 5;
284     //下移第j列
285     for (i = 4; i >= 1; i--)
286         if (a[i][j] != 0)
287         {
288             a[--cnt][j] = a[i][j];
289             if (cnt != i)
290                 a[i][j] = 0;
291         }
292     return flag;
293 }
294 
295 
296 //作用:将(x2,y2)处元素合并到(x1,y1)上
297 //入口参数:坐标(x1,y1) (x2,y2)
298 //返回:无
299 
300 void comb(int x1, int y1, int x2, int y2)
301 {
302     a[x1][y1] *= 2;
303     a[x2][y2] = 0;
304     if (a[x1][y1] == 2048)
305         FLAG = 1;
306 }
307 
308 //作用:检查矩阵是否填满
309 //入口参数:无
310 //返回:1代表矩阵已满,0代表矩阵未满
311 
312 int Check()
313 {
314     int i, j, cnt = 0;
315     for (i = 1; i <= 4; i++)
316         for (j = 1; j <= 4; j++)
317             if (a[i][j] != 0)
318                 cnt ++;
319     if (cnt == 16)
320         return 1;
321     else
322         return 0;
323 }

 

4.前段时间“最强大脑”大热,尤其是那个数字华容道的题目让小范学长看的那叫一个热血 沸腾(这可能是小范学长唯一能看懂的题目),于是小范学长想能不能用 C 语言自己也做一 个,可是大家懂的,小范学长连上一个 2048 也没时间写,所以数字华容道当然也就没时间 了,所以大家能不能再帮帮贪玩的小范学长,让他能两个游戏换着玩?

 

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <time.h>
  4 
  5 int n, x, y;
  6 char direction;
  7 int a[10][10];
  8 
  9 void Create(int);
 10 void Print(void);
 11 void Move(char);
 12 void Check(void);
 13 
 14 int main()
 15 {
 16     printf("输入n生成n阶华容道:
使用wsad移动
");
 17     scanf("%d",&n);
 18     Create(n);
 19     Print();
 20     while (1)
 21     {
 22         getchar();
 23         scanf("%c",&direction);
 24         Move(direction);
 25         Print();
 26         Check();
 27     }
 28     return 0;
 29 }
 30 
 31 //作用:生成华容道
 32 //入口参数:华容道阶数
 33 //返回:无
 34 
 35 void Create(int n)
 36 {
 37     int i, j;
 38     for (i = 1; i <= n; i++)
 39         for (j = 1; j <= n; j++)
 40             a[i][j] = (i-1)*n + j;
 41     a[n][n] = 0;
 42     x = y = n;
 43     
 44     srand((unsigned)time(0));
 45     i = rand()%n + 1;
 46     j = (i+100)%n +1;
 47     a[n][n] = a[i][j];
 48     a[i][j] = 0;
 49     x = i;
 50     y = j;
 51 }
 52 
 53 //作用:打印华容道
 54 //入口参数:无
 55 //返回:无
 56 
 57 void Print(void)
 58 {
 59     int i, j;
 60     for (i = 1; i <= n; i++)
 61     {
 62         for (j = 1; j <= n; j++)
 63         {
 64             if (a[i][j] != 0)
 65                 printf("%4d",a[i][j]);
 66             else
 67                 printf("    ");
 68         }
 69         printf("
");
 70     }
 71 }
 72 
 73 //作用:完成数字移动
 74 //入口参数:方向
 75 //返回:无
 76 
 77 void Move(char d)
 78 {
 79     if (d == w)
 80         if (x+1 <= n)
 81         {
 82             a[x][y] = a[x+1][y];
 83             a[x+1][y] = 0;
 84             x++;
 85         }
 86     if (d == s)
 87         if (x-1 >= 1)
 88         {
 89             a[x][y] = a[x-1][y];
 90             a[x-1][y] = 0;
 91             x--;
 92         }
 93     if (d == a)
 94         if (y+1 <= n)
 95         {
 96             a[x][y] = a[x][y+1];
 97             a[x][y+1] = 0;
 98             y++;
 99         }
100     
101     if (d == d)
102         if (y-1 >= 1)
103         {
104             a[x][y] = a[x][y-1];
105             a[x][y-1] = 0;
106             y--;
107         }
108 }
109 
110 //作用:检查是否完成
111 //入口参数:无
112 //返回:无
113 
114 void Check(void)
115 {
116     int i, j, flag = 0;
117     if (a[n][n] == 0 && a[n][n-1] == n*n-1)
118     {
119         flag = 1;
120         for (i = 1; i < n; i++)
121         {
122             if (flag == 0)
123                 break;
124             for (j = 1; j < n; j++)
125                 if (a[i][j] != (i-1)*n + j)
126                 {
127                     flag = 0;
128                     break;
129                 }
130         }
131     }
132     if (flag == 1)
133         printf("WIN");
134 }

 

 

 

以上是关于孵化器 软件第四周的主要内容,如果未能解决你的问题,请参考以下文章

软件项目管理第四周作业

软件工程第四周作业代码规范

软件工程学习进度第四周

软件工程第四周作业-PSP

第四周读书笔记

软件工程第四周作业 - 单元测试