第十一周

 

这个作业属于那个课程C语言程序设计II
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3201
我在这个课程的目标是 递归函数
这个作业在那个具体方面帮助我实现目标 熟练的运用递归函数
参考文献 c语言程序设计p221
7-1 汉诺塔问题* (10 分)
 

汉诺塔是一个源于印度古老传说的益智玩具。据说大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘,大梵天命令僧侣把圆盘移到另一根柱子上,并且规定:在小圆盘上不能放大圆盘,每次只能移动一个圆盘。当所有圆盘都移到另一根柱子上时,世界就会毁灭。

题图1.jpg

请编写程序,输入汉诺塔圆片的数量,输出移动汉诺塔的步骤。

输入格式

圆盘数 起始柱 目的柱 过度柱

输出格式

移动汉诺塔的步骤
每行显示一步操作,具体格式为:
盘片号: 起始柱 -> 目的柱
其中盘片号从 1 开始由小到大顺序编号。

输入样例

3
a c b

输出样例1: a -> c

2: a -> b

1: c -> b

3: a -> c

1: b -> a

2: b -> c

1: a -> c

实验代码:

 1 def move(n, a, b, c):
 2     if n == 1:
 3         s=str(n)+':'
 4         print(s,a,'->',b)
 5     else:
 6         move(n-1,a,c,b)
 7         s=str(n)+':'
 8         print(s,a, '->',b)
 9         move(n-1,c,b,a)
10 n=int(input())
11 x,y,z=(input().split())
12 move(n,x,y,z)

本题调试过程:

太简单

7-2 估值一亿的AI核心代码 (20 分)
 

AI.jpg

以上图片来自新浪微博。

本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:

  • 无论用户说什么,首先把对方说的话在一行中原样打印出来;
  • 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
  • 把原文中所有大写英文字母变成小写,除了 I
  • 把原文中所有独立的 can youcould you 对应地换成 I canI could—— 这里“独立”是指被空格或标点符号分隔开的单词;
  • 把原文中所有独立的 Ime 换成 you
  • 把原文中所有的问号 ? 换成惊叹号 !
  • 在一行中输出替换后的句子作为 AI 的回答。

输入格式:

输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。

输出格式:

按题面要求输出,每个 AI 的回答前要加上 AI: 和一个空格。

输入样例:

6
Hello ?
 Good to chat   with you
can   you speak Chinese?
Really?
Could you show me 5
What Is this prime? I,don 't know

输出样例:

Hello ? AI: hello! Good to chat with you AI: good to chat with you can you speak Chinese? AI: I can speak chinese! Really? AI: really! Could you show me 5 AI: I could show you 5 What Is this prime? I,don 't know AI: what Is this prime! you,don't know

实验代码:

 1 n=int(input())
 2 i,f=0,0
 3 l=[]
 4 fat=[]
 5 while i<n:
 6         s=input()
 7         i=i+1
 8         for x in s.split(" "):
 9             if x!="":
10                 l.append(x)
11 
12         relizeword=" ".join(l)
13         fat=list(relizeword)
14         relizeword=relizeword.lower()
15         l=list(relizeword)
16         
17         while f<len(l):
18             if l[f]=='i' and fat[f]=='I':
19                 l[f]='I'
20             if l[f]=='?':
21                 l[f]='!'
22             if (l[f]=='I' and not l[f+1].isalpha() and not l[f-1].isalpha()):
23                 l[f]='you'
24             f=f+1
25 
26         relizeword="".join(l)
27         l=[]
28         f=0
29 
30         for x in relizeword.split(" "):
31             if x!="":
32                 if x=='me':
33                     x='you'
34                 l.append(x)
35         while f<len(l):
36             if l[f]=='could':
37                     if l[f+1].find("you")>=0 and len(l[f+1])<=4:
38                         l[f]='I'
39                         l[f+1]='could'
40                         f=f+1
41             if l[f]=='can':
42                     if l[f+1].find("you")>=0 and len(l[f+1])<=4:
43                         l[f]='I'
44                         l[f+1]='can'
45                         f=f+1
46             f=f+1
47         relizeword=""
48         f=0
49         print(l)
50         while f<len(l):
51             if f!=len(l)-1:
52                 if len(l[f+1])!=1 and (l[f+1].isalnum() or l[f+1].find("'")<0):
53                     relizeword=relizeword+l[f]+" "
54                 else:
55                     relizeword=relizeword+l[f]
56             else:
57                 relizeword=relizeword+l[f]
58             f=f+1
59         
60         l=[]
61         print("AI: %s"%relizeword) 

本题调试过程解决方案:

问题太多了,总之最难的就在消除空格,但由于脑子不够,C语言写了很久放弃了,换python写了一天就写出来了.

运行结果截图:

 
7-3 ***八皇后问题 (20 分)
 

在国际象棋中,皇后是最厉害的棋子,可以横走、直走,还可以斜走。棋手马克斯·贝瑟尔 1848 年提出著名的八皇后问题:即在 8 × 8 的棋盘上摆放八个皇后,使其不能互相攻击 —— 即任意两个皇后都不能处于同一行、同一列或同一条斜线上。

现在我们把棋盘扩展到 n × n 的棋盘上摆放 n 个皇后,请问该怎么摆?请编写程序,输入正整数 n,输出全部摆法(棋盘格子空白处显示句点“.”,皇后处显示字母“Q”,每两格之间空一格)。

输入格式

正整数 n (0 < n ≤ 12)

输出格式

若问题有解,则输出全部摆法(两种摆法之间空一行),否则输出 None。

要求:试探的顺序逐行从左往右的顺序进行,请参看输出样例2。

输入样例1

3

输出样例1

None

输入样例2

6

输出样例2

. Q . . . .
. . . Q . .
. . . . . Q
Q . . . . .
. . Q . . .
. . . . Q .

. . Q . . .
. . . . . Q
. Q . . . .
. . . . Q .
Q . . . . .
. . . Q . .

. . . Q . .
Q . . . . .
. . . . Q .
. Q . . . .
. . . . . Q
. . Q . . .

. . . . Q .
. . Q . . .
Q . . . . .
. . . . . Q
. . . Q . .
. Q . . . .
 

实验代码:

就是一个搜索和枚举.

| 周/日期   | 这周所花的时间 | 代码行 | 学到的知识点简介                                             | 目前比较疑惑的问题                                           |
| --------- | -------------- | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| 3/3-3/9   | 3h             | 100    | fscanf和fprintf还有fgets用法                                 | 运用有结构的代码时总运行错误                                 |
| 3/9-3/15  | 4h             | 50     | 学习了二维数组的定义                                         | 字符串的输入和输出老不规范                                   |
| 3/15-3/22 | 5h             | 25     | 学习了用malloc定义二维数组                                   | 指针问题很让我恼火                                           |
| 3.22-3.28 | 4h             | 35     | 复习了对指针的操作                                           | 对多级指针的定义和使用都不是太熟练和熟悉,其次对指针的作用大小不是非常理解 |
| 3.28-4.5  | 3h             | 45     | 简单的把python以前不是很懂的又看了一遍,发现弄懂了许多以前不懂的 | 对算法的了解太低                                             |
| 5.5-5.11  | 30h            | 200    | 在C语言上没有什么增进,但在python上熟练度比以前高了很多       | 疑问说不上,只是算法可能是编程中非常有趣而又有挑战性的一项东西 |

原文地址:https://www.cnblogs.com/2293002826PYozo/p/10846743.html