泷泷。。  

0.展示PTA总分

1.本章学习总结

1.1 学习内容总结

循环基本结构

for循环:
    for (表达式1; 表达式2; 表达式3)
    {
        循环体语句;
    }

while循环:

    while (表达式)
    {
        循环体语句;
    }

do-while循环:
    do 
    {
        循环体语句;
    } while (表达式);

判断优先使用哪一种循环结构的关键:寻找题目中的条件,判断循环次数是否确定。
若循环次数为常数,则采用for循环,反之选择while循环。

嵌套循环

  • 嵌套循环由上述3种基本循环类型所组成的代码块。
  • 在阅读嵌套循环或写嵌套循环的过程中,十分需要注意单个循环的结构和位置,防止将各个循环之间的某些变量或条件混肴。

重要语句

  • break; :强制循环结束
  • continue; :跳过循环体中continue后面的语句,继续下一次循环
  • while (1) :恒真循环语句
  • while (i) : 循环执行条件是i不等于0,也就是只要i不等于0,就进入while循环
  • while (!i) : 循环执行条件是i等于0,也就是只要i等于0,就进入while循环
  • pi = ch - '0' :让变量ch转化为数值并赋值给pi
  • ch = ch - 'a' + 'A' :小写转化为大写
  • ch = ch - 'A' + 'a' :将大写转化为小写
  • a++; : a值加1,而整个表达式为执行前的值
  • ++a; : a值加1,整个表达式也为执行后的值

1.2 本章学习体会

  • 作业量加大,难度变高,需要提前预习才可以跟上老师讲的内容。
  • pta里面的题有时候只有30行左右的题目可是自己就是想不出来,逻辑思维和解决问题的能力有待提高
  • 本周代码量大概880行

2.PTA实验作业

2.1

2.1.1

数据处理:定义n, i, j, m, t整型变量,引入flag标识符作为判断是否有无素数。
伪代码:
输入n
t←pow(2, n) - 1
for t←2 to t
do m ← pow(2, i) - 1
 for j←2 to sqrt (m)
if m求余j等于0 then
do 退出循环
if j > sqrt(m) && m <= t then
do 输出m 且flag←1
if flag等于0 then
do 输出None
2.1.2 代码截图

2.1.3 造测试数据
输入数据 输出据 说明
1 None 无梅森数
2 3 正常数据
6 3 7 31 多个数据,格式正确
2.1.4 PTA提交列表及说明

  • 其实刚开始拿到这道题很懵,因为可能之前上课没有认真听,不知道引入标识符flag来判断是否有素数。在这一点上纠结了很久
  • 由于设置变量有点多且个人习惯,所以在编写程序中,我都是把变量放在后面定义,以至于在出现了有一些变量未被定义,称为未标识符

2.2

2.2.1

数据处理:定义c5, c2, c1, cnt , x分别为五分硬币,二分硬币,一分硬币的数量,换法种数,零钱数额。
伪代码:
输入零钱数额
for(五分硬币从19到1)
		for(二分硬币从49到1)
			for(一分硬币从99到1)
				if(当各硬币的数量乘以其面值等于需兑换的总金额时){
					输出各种硬币的数量和换法种数
					换法种数自加一
				}
2.2.2 代码截图

2.2.3 造测试数据
输入数据 输出数据 说明
9 fen5:1, fen2:1, fen1:2, total:4 count=1 一般sample
8 fen5:1, fen2:1, fen1:1, total:3 count=1 最小金额数
2.2.4 PTA提交列表及说明

  • 虽然这次提供的是2次正确的提交列表,但是我确实想了很久,因为虽然想到了老师上课讲的用嵌套循环再加一个等式来判断,但是我一开始在vs上用的是变量自增,
    导致我一直搞不清限制变量的常数,最后想了挺久的,才发现可以用自减,就发现自己好傻

2.3

2.3.1

数据处理:定义一个int p(int a,int b)函数用来计算幂次方之和。
伪代码:
输入n
for (定义i等于m加到v)
{
定义k等于i,sum等于0
while (k大于0)
{
    t=k%10;
    k=k/10;
   sum=sum+p(t,n)
}
if (sum=i)
输出i
2.3.2 代码截图

2.3.3 造测试数据
输入数据 输出数据 说明
3 153,370,371,407 一般sample
6 548834 一般sample
2.3.4 PTA提交列表及说明

  • 答案错误的原因:忘记设置一个变量k代替i去进行循环里的计算,导致循环过后i的值变了,所以就错了。

3. 代码互评

1.

2.

其实这2段代码的区别主要就是在时间,距离如何计算以及对休息时间的判断。
1.毫无疑问,第二种代码无疑简洁很多,它不仅引入了flag标识符,来判断是否休息,并且在设置变量上也有一定的技巧,使得所设置的变量减少。但是这种方法对我来说,一开始,我很难想到,所以我更记住这种简洁的方法,应用到以后更加复杂的代码中。
2.休息时间的判断:在第一种代码中,采用数学上的求余.而第二种则是采用是否等于0,然后重新等于0来计算。第二种来说,对我是一种较新的方法。
3.当然第二段代码也有不足之处,在于变量名使用不规范,导致我在读这段代码多花了挺长时间的。

posted on 2019-10-20 21:54  泷泷。。  阅读(179)  评论(3编辑  收藏  举报