C语言博客作业02--循环结构
1.本章学习总结
1.1思维导图
1.2 本章学习体会及代码量学习体会
1.2.1学习体会
本章内容较前一章学习的内容要难,在PTA上花费的时间也更多,尤其是在循环结构(单层)的题集上花费的时间太多了,经常纠结在一个题目,导致自己的进度比其他人落下很多,今后会加快速度,改进学习方法。学习循环结构到现在,我体会到了逻辑思维能力的重要性,尤其是在循环的嵌套这方面要多多做题,锻炼自己的思维灵活度。还有就是再写代码的时候一些细节问题要时时注意,不然等到最后是很难发现这些小错误的!还有,在写代码的时候,变量要尽量设得少一点,不然等后面代码量变长了,会让代码的可读性降低,看的眼花缭乱,并且应该合理运用注释。
1.2.2代码累计
2.PTA总分
2.1截图
2.2我的总分
我的总分:285
3.PTA实验作业
3.1PTA题目一
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?
3.1.1算法分析
定义rabbit为兔子的路程,tort为乌龟的路程,time为累计时间,T为输入的总时间
while (time<=T)
tort=tort+3;
rabbit=rabbit+9;
time++;
if tort<rabbit && time%10==0 && (T-time)>=30 then
tort=tort+90;
time=time+30;
end if
if time==T then
break // 退出循环
if tort<rabbit && time%10==0 && (T-time)<30 then
tort=tort+(T-time)*3;
break; //退出循环
if tort>rabbit then 输出 @_@ tort;
else if tort<rabbit then 输出 ^_^ rabbit;
else 输出 -_- rabbit;
end if
3.1.2代码截图
3.1.3测试数据
3.1.4PTA提交列表及说明
-
Q1 第一次打的代码过于复杂,花了很久的时间都没过。
-
A1 后来在课上听老师讲了解法,回去把代码重新编了一遍,将循环条件设成time<=T,然后再一分钟判断一次,改完后代码简洁了。
-
Q2 没把兔子在睡觉时获胜的可能性搞懂。
-
A2 多加了一个if的条件,把乌龟和兔子的距离以及时间的剩余量都考虑进去,最后正确了。
3.2PTA题目二
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
3.2.1算法分析
定义wu为五元硬币的个数,er和yi分别是二元和一元硬币数,time为兑换方式的数量,total为输入的总金额
for x=(n-1-2)/5 to x>0 do
for y=(n-1-5*x)/2 to y>0 do
z=n-5*x-2*y;
time=time+1;
total=x+y+z;
输出 fen5:wu, fen2:er, fen1:yi, total:total 换行
if x==1&&y==1 then 输出 count=time
3.2.2代码截图
3.2.3测试数据
3.2.4PTA提交列表及说明
-
Q1 第一次编写的时候,把二进制数当做一个整数输入,再一个一个得到数字,然后才算十进制。代码过于复杂,虽然答案看上去正确,但和题目要求不符。
-
A1 重新改写代码,使二进制作为字符输入,输出的答案正确。
3.3PTA题目三
输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!
3.3.1算法分析
定义变量ch,使输入数字为字符,sum为十进制的数,digit为输入的数字(看作余数),flag判断是否输出错误。
while((ch=getchar())!='\n')
if (ch=='1'||ch=='0') then
digit= ch - '0';
sum=sum*2+digit;
end if
else if ((ch=getchar())!='\n')
flag=1;
end if
if flag==1 then
输出error input!
else
输出sum
3.3.2代码截图
3.3.3测试数据
3.3.4PTA提交列表及说明
-
Q1 刚开始想这道题目的时候没有头绪,不知道怎么用嵌套。
-
A1 后来经提醒,知道了大致过程。
-
Q2 难以理解怎么至少留有一个二元和一个一元。
-
A2 百度后知道了方法,要在第一个选出五元硬币个数的循环中“留下”一个一和一个二,在第二个选出二元硬币数量的循环中“留下”一个一元。
4.代码互评
4.1代码截图
-
同学
-
自己
4.2二者的不同
-
相同:1.都是每个分钟都进行判断。
2.最后都是先判断龟兔移动的路程大小再输出。
3.每每跑十分钟判断一次。 -
不同: 1.对方设了休息时间和跑步时间,而我只有一个累积的时间。应该学习,那样看起来更清晰。
2.对方兔子休息的时候,休息时间减一,开始跑的时候,跑步时间减一;而我是在判断时间剩余大于三十后再将累计时间加
三十,并只让乌龟跑。
3.对方的判断语句都是围绕时间,而我判断时既考虑兔子乌龟的距离又考虑时间。她的算法更简洁。