第十一周编程总结

作业头

这个作业属于哪个课程 C语言程序设计
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3201
我在这个课程的目标是 合理定义程序的多函数结构;能够使用递归函数进行编程;掌握宏的基本用法;掌握编译预处理的概念
这个作业在哪个具体方面帮助我实现目标 游戏的设计
参考文献 https://blog.csdn.net/ssf_cxdm/article/details/89045701

基础作业PTA:

一、汉诺塔问题* (10 分)

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

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

输入格式

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

输出格式

移动汉诺塔的步骤

每行显示一步操作,具体格式为:

盘片号: 起始柱 -> 目的柱

其中盘片号从 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)实验代码

#include<stdio.h>
void hanio (int n,char a,char b,char c)  // n表示盘子总数,   设置参数,说明通过b这个辅助柱子把A中的盘子移动至c
{
    if(n==1)
    {
    printf("%d: %c -> %c\n",n,a,b);  //如果只有一个盘子就不需要方法,直接移动
    }
    else{
        hanio (n-1,a,c,b);   //如果不止一个盘子则调用n-1个盘子的方法,把上面的n-1个盘子由a,借助c移动到b,a就只剩一个最大的了
        printf("%d: %c -> %c\n",n,a,b);  //把a里剩下的最大的盘子移动至b
        hanio(n-1,c,b,a); //c里最大的,b有n-1个排好的盘子,同样用移动n-1个盘子的方法把n-1个盘子移动至c
        }
}
int main()
{
    int n;
    char x,y,z;
	scanf("%d\n",&n);
	scanf("%c %c %c",&x,&y,&z);
    hanio(n,x,y,z);  //输出答案
}

2)设计思路

3)运行中遇到的问题

没有定义具体的柱子字符,然后根据书写这题的时候也没注意输出格式的问题

4)运行结果

二、估值一亿的AI核心代码 (20 分)

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

无论用户说什么,首先把对方说的话在一行中原样打印出来;

消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;

把原文中所有大写英文字母变成小写,除了 I;

把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词;

把原文中所有独立的 I 和 me 换成 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)实验代码

[https://blog.csdn.net/ssf_cxdm/article/details/89045701)

2)设计思路

2.1、 如果都是空格的情况 直接输出回车
2.2、先把所有的字符除了I转化成小写,顺带把 ?改成 !
2.3、把字符串的中间空格最多留一个
2.4、把需要替换的替换掉 如me 、 I 、 can you 、could you
2.5、去掉首尾 的空格
2.6、输出的时候注意如果当前是空格,后面是标点 ,则不输出该空格,否则正常输出。

思路来源于[https://blog.csdn.net/belous_zxy/article/details/88927418)

3)运行中遇到的问题

4)运行结果截图

三、八皇后问题 (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 . . . .

1)实验代码

2)设计思路

3)运行中的问题

4)运行结果

学习进度条

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
3/4-3/11 七小时 37行 1、文件建立 2、对文件加密 1、if读取的文件是否必须存在,以“W”的方式写还是“a的方式”,两者性质是否相同 (这是做题中迷惑的,目前已解决)
3/12-3/16 九小时 53行 二维数组的基本定义
3/18-3/22 十小时 96行 冒泡法排序 选择法排序 二维数组的应用 冒泡排序法老师在课上提的不多,所以当时做还是思考很久
3/23-3/29 十小时 107行 排序法巩固 文件储存的巩固 判断回文 一些排序题的算法思路不清晰,还有流程图
3/30-4/5 十五个小时 72行 指针 数组 加 * 号和不加 * 的差别
4/6-4/12 二十一小时 116行 数组名作为函数参数的用法 %s的格式输出细节,输出参数问题
4/13-4/19 十六小时 119行 用字符串函数以及使用指针操作字符串的方法,掌握动态内存分配 结构类型运用及动态内存分布的一些概念
4/20-4/26 十六小时 88行 定义结构,能够使用结构变量与结构数组进行熟练编程,掌握结构指针的操作 预习题第三问
4/27-5/2 十小时 0行 1、如何有效地记忆与学习2、如何提问 理定义程序的多函数结构;能够使用递归函数进行编程
5/3-5/10 十小时 21行 掌握宏的基本用法;掌握编译预处理的概念 PTA两个编程题还有选择题第五题

学习感悟

老师这次要求解决能够对相对复杂的问题,除了老师上课说的汉诺塔的问题,其他两个编程题都下不了手,太难了,在网上找资料,很多都是没接触的,自己太菜鸡,学习吧骚年!

结对编程感悟

问了好多人 这次的题都很困难,我们都束手无策啊

预习题

请举实例解释以下几个概念:数组指针,指针数组,指针函数,函数指针,二级指针,单向链表。(无实例不给分)

指针数组,看后面两个字,它是一个数组,数组元素是指针; 实例: int p[10]根据优先级指针<数组
数组指针,看后面两个字,它是一个指针,指向一个数组; 实例:int(
p)[10]根据优先级数组<指针
函数指针,看后面两个字,它是一个指针,指向一个函数; 实例:int(pfun)(int a,int b)根据优先级函数<指针
指针函数,看后面两个字,它是一个函数,返回指针类型; 实例:int
pfun(int a,int b)根据优先级指针<函数
二级指针:char*a[]={"hello" ,"world"}为例,a为二级指针

单向链表:
1.单向:只有前到后的方向
2.节点=数据域+引用域
3.self.__head引用第一个有效节点,如果链表为空则引用空
4.第一个节点称之为头节点,最后一个节点称之为尾节点
5.尾节点的引用与指空

class Node(object):
def __init__(self,data):

数据域

self.data=data

引用域

self.next=None

(此段文字来自于[ https://zhuanlan.zhihu.com/p/52627602))

折线图

时间 代码行数 博客字数
第一周 39 292
第二周 37 465
第三周 75 1099
第四周 96 1230
第五周 107 1039
第六周 66 1881
第七周 116 2415
第八周 119 2477
第九周 88 3089
第十周 0 1713
第十一周 21行 2546
posted @ 2019-05-10 13:15  XHIJL  阅读(217)  评论(0编辑  收藏  举报