• 2019春季第十一周作业


    问题 回答
    这个作业属于那个课程 C语言程序设计
    这个作业要求在哪里 第十一周作业
    我在这个课程的目标是 掌握编写程序的框架和递归算法,了解一些自定义头文件
    这个作业在哪个具体方面帮助我实现目标 递归算法和函数结构
    参考文献 C语言程序设计

    汉诺塔问题

    汉诺塔是一个源于印度古老传说的益智玩具。据说大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着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);
    int main(void)
    {
    	int n;
    	char a,b,c;
    	scanf("%d
    ",&n);
    	scanf("%c %c %c",&a,&b,&c);
    	hanio(n,a,b,c);
    	return 0;
     } 
     void hanio(int n,char a,char b,char c)
     {
     	if(n==1){
     		printf("%d: %c -> %c
    ",n,a,b);
    	 }
    	else{
    	 	hanio(n-1,a,c,b);
    	 	printf("%d: %c -> %c
    ",n,a,b);
    	 	hanio(n-1,c,b,a);
    	 }
     }
    

    2)流程图

    3)本题调试过程碰到的问题及解决办法

    问题:就是递归的那个函数不知道怎么搞
    解决办法:书上有一个例题和这个一样,就对照着写了一下

    4)运行结果截图

    5)评价

    这个题目其实运动的过程我是清楚的,但是代码不是怎么会实现,这个题我是看书写的,总的来说递归这种算法我不是很会用
    用时:半个小时

    估值一亿的AI核心代码

    以上图片来自新浪微博。
    本题要求你实现一个稍微更值钱一点的 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)实验代码

    #include<stdio.h>
    #include<string.h>
    int unsign(char a);
    int main(void)
    {
    	int i,N,l,s,j,m,count,k,len;
    	char str[10][1001],str2[1001];
    	scanf("%d",&N);
    	getchar();
    	for(i=0;i<N;i++){
    		gets(str[i]);
    	}
    	for(l=0;l<N;l++){
    	    puts(str[l]);
    		printf("AI: ");
    		k=0;
    		strcpy(str2,str[l]);
    		len=strlen(str2);
    	    if(str2[0]==' '){
    		    for(j=1;j<len;j++){
    			    if(str2[j]!=' '&&unsign(str2[j+1])==0){
    				    str[l][k]=str2[j];
    				    k++;
                        count=j+1;
                        break;
                    }
    		        if(str2[j]!=' '&&unsign(str2[j+1])==1){
    				    str[l][k]=str2[j];
    				    if(str[l][k]=='?'){
    					    str[l][k]='!';
    				    }
    				    k++;
                        count=j+1;
                        break;
    	     	    }
    	        }
        for(j=count;j<len;j++){
    			if(str2[j]!=' '){
    				str[l][k]=str2[j];
    				if(str[l][k]=='?'){
    					str[l][k]='!';
    				}
    				    k++;
    			}
    			if(str2[j]==' '&&str2[j+1]!=' '&&unsign(str2[j+1])==1){
    				str[l][k]=str2[j];
    				k++;
    			}
    			if(str2[j]==' '&&str2[j+1]!=' '&&unsign(str2[j+1])==0){
    				str[l][k]=str2[j+1];
    				if(str[l][k]=='?'){
    					str[l][k]='!';
    				}
    				    k++;
    				    j++;
    			}
    		}
        }
    	if(str2[0]!=' '){
    		k=0;
    		for(j=0;j<len;j++){
    			if(str2[j]!=' '){
    				str[l][k]=str2[j];
    				if(str[l][k]=='?'){
    					str[l][k]='!';
    				}
    				    k++;
    			}
    			if(str2[j]==' '&&str2[j+1]!=' '&&unsign(str2[j+1])==1){
    				str[l][k]=str2[j];
    				k++;
    			}
    			if(str2[j]==' '&&str2[j+1]!=' '&&unsign(str2[j+1])==0){
    				str[l][k]=str2[j+1];
    				if(str[l][k]=='?'){
    					str[l][k]='!';
    				}
    				    k++;
    				    j++;
    			}
    		}
        }
    	str[l][k]='';
    	len=strlen(str[l]);
    	for(i=0;i<len;i++){
    		if(str[l][i]>='A'&&str[l][i]<='Z'&&str[l][i]!='I'){
    			str[l][i]=str[l][i]+32;
    		}
    	}
    	char str1[1001];
    	int flag[1000];
    	strcpy(str1,str[l]);
    	len=strlen(str1);
    	j=0;
    	m=0;
    	for(i=0;i<len;i++){
    		if(unsign(str1[i-1])==0&&str1[i]=='c'&&str1[i+1]=='a'&&str1[i+2]=='n'&&str1[i+3]==' '&&str1[i+4]=='y'&&str1[i+5]=='o'&&str1[i+6]=='u'&&unsign(str1[i+7])==0){
    			str[l][j]='I';
    			str[l][j+1]=' ';
    			str[l][j+2]='c';
    			str[l][j+3]='a';
    			str[l][j+4]='n';
    			flag[m]=j;
    			m++;
    			j=j+5;
    			i=i+6;
    			continue;
    		}
    		if(unsign(str1[i-1])==0&&str1[i]=='c'&&str1[i+1]=='o'&&str1[i+2]=='u'&&str1[i+3]=='l'&&str1[i+4]=='d'&&str1[i+5]==' '&&str1[i+6]=='y'&&str1[i+7]=='o'&&str1[i+8]=='u'&&unsign(str1[i+9])==0){
    			str[l][j]='I';
    			str[l][j+1]=' ';
    			str[l][j+2]='c';
    			str[l][j+3]='o';
    			str[l][j+4]='u';
    			str[l][j+5]='l';
    			str[l][j+6]='d';
    			flag[m]=j;
    			m++;
    			j=j+7;
    			i=i+8;
    			continue;
    		}
    		str[l][j]=str1[i];
    		j++;
    	}
    	str[l][j]='';
    	strcpy(str1,str[l]);
    	len=strlen(str1);
    	j=0;
    	int b;
    	for(i=0;i<len;i++){
    		if(unsign(str1[i-1])==0&&str1[i]=='I'&&unsign(str1[i+1])==0){
    			b=0;
    			for(s=0;s<=m;s++){
    				if(flag[s]!=i){
    					b=1;
    				str[l][j]='y';
    			    str[l][j+1]='o';
    			    str[l][j+2]='u';
    			    j=j+3;
    			    break;
    			}
    			}
    			if(b==0){
    				str[l][j]=str1[i];
    				j++;
    			}
    			continue;
    		}
    		if(unsign(str1[i-1])==0&&str1[i]=='m'&&str1[i+1]=='e'&&unsign(str1[i+2])==0){
    			b=2;
    			for(s=0;s<=m;s++){
    				if(flag[s]!=i){
    					b=3;
    				str[l][j]='y';
    			    str[l][j+1]='o';
    			    str[l][j+2]='u';
    			    j=j+3;
    			    i=i+1;
    			    break;
    			}
    			}
    			if(b==2){
    				str[l][j]=str1[i];
    				j++;
    			}
    			continue;
    		}
    		str[l][j]=str1[i];
    		j++;
    	}
    	str[l][j]='';
    	    puts(str[l]);
    	}
    	return 0;
    }
    int unsign(char a)
    {
    	if(a>='0'&&a<='9'){
    		return 1;
    	}
    	if(a>='A'&&a<='Z'){
    		return 1;
    	}
    	if(a>='a'&&a<='z'){
    		return 1;
    	}
    	return 0;
    }
    

    2)思路

    因为这个题我在pta上怎么都通过不了,就不画流程图了
    思路就是按照题目的要求,分块一步一步的实现,首先我是想着先把所有的不合格的空格消掉,顺带把?改成!,然后再去把除了I之外的所有大写改成小写,然后就去把can /could you改了,顺带标记一下,之后把没有标记的me/I改成you,就可以输出了。

    3)错误截图

    问题:不知道到底哪里错了,我在dev里调试运行了无数次,但我不知道我是不是忽略了什么,在pta上怎么都不对,是我少了什么吗

    4)运行结果截图

    5)评价

    这道题做的我想死,刚一看题的时候觉得还好,就是要求有点多,感觉有点麻烦,但没想到的是我写出来后怎么都找不到错,关键是在dev上运行调试我发现不了错,导致我不知道要改哪里才好

    挑战作业

    关于挑战作业貌似都是关于递归的吧,一方面这次我把时间都用在了第二题上,关键还没做出来,内心崩溃,没有精力,也没有时间去写了,另一方面就是递归这种算法我不太会,所以没做,之后会再看的。

    预习作业

    请举实例解释以下几个概念:数组指针,指针数组,指针函数,函数指针,二级指针,单向链表。(无实例不给分)
    数组指针:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。

    课本194页
    指针数组:是由指针变量构成的数组。(如果数组的各个元素都是指针类型,用于存放内存地址,则这个数组就是指针数组)
    一般格式:类型名 *数组名 [数组长度];
    课本264页 奥运五环色

    指针函数:使用指针作为函数的参数或数组名
    课本188页,角色互换

    函数指针:指向函数的指针,在C语言中,函数名代表函数的入口地址,,可以定义一个指针变量,接收函数的入口地址,让它指向函数。
    一般格式:类型名(*变量名)(参数类型表);
    课本279页

    二级指针:指向指针的指针。
    一般格式:类型名* *变量名;
    课本269页

    单向链表:一种常见而重要的动态存储分布的数据结构。链表变量一般用指针head表示,用来存放链表首结点的地址,链表每个结点由数据部分和下一个结点的地址部分组成,链表中的最后一个结点称为表尾,其下一个结点的地址部分的值为NULL。
    课本286页

    学习进度条

    周/日期 这周所花的时间 代码行数 学到的知识点简介 目前比较迷惑大问题
    5/5-5/10 30个小时 500行 递归算法,编程结构,头文件编写 递归算法

    累计代码行数和博客字数

    时间 博客字数 代码行数
    第一周 0 80
    第二周 100 180
    第三周 400 330
    第四周 600 480
    第五周 900 720
    第六周 1250 890
    第七周 1610 1065
    第八周 2010 1295
    第九周 2480 1495
    第十一周 3080 1995

    学习感悟

    1)总是莫名其妙的写错一些不该写错的地方,可能还是因为不够专注吧,感觉这次的题目有点难,尤其是那个递归算法,我觉得好抽象,递归式子我找不到,所以还是要多练练吧
    2)疑惑:就是那个递归啊,不知道怎么用代码实现递归的这个过程

    结对编程

    过程:就是一起思考该怎么做,讨论解题的的思路
    我觉得结对编程的好处就是可以给对方提供一个思路,一个做题的不一样的方向
    缺点就是结对编程不如自己编程那么的时间灵活

  • 相关阅读:
    《WCF全面解析》-上册 1-3章 读书笔记
    git上传本地Intellij idea 项目到码云的git仓库中
    Node.js安装及环境配置之Windows篇
    让IntelliJ IDEA支持创建*.vue文件及打开*.vue文件
    maven命令mvn package指定jar包名称
    spring 时间格式化注解@DateTimeFormat和 @JsonFormat
    事务及事务隔离级别
    @RequestBody的使用
    接口jdk1.8与jdk1.9新特性
    Spring AOP无法拦截内部方法调用-- expose-proxy="true"用法
  • 原文地址:https://www.cnblogs.com/H-Alice/p/10840225.html
Copyright © 2020-2023  润新知