我看练习7最后一道题只有一个人做出来了,提醒一下如果遇到最后一个点超时的情况可以尝试优化一下那个循环算法。

for循环里面其实只用循环到被除数的一半就可以了,因为最大因子不会超过原数一半

老师好,我的VScode写完代码进行debug的时候自动生成的launch,json文件里面program那一行内容里会出现build\\Debug\\outDebug,然后导致debug出错,而且修改了路径变成.exe文件之后debug出现问题,基本完成不了debug了,这种情况怎么解决呢?

       看了这次大家的编程作业,首先一个问题就是保证代码的可读性,不要写的代码只有自己能够看懂,让其他人也能看懂。比如标识符的命名不要一直是a,b,c,d这些,通过标识符的命名就可以知道这个标识符的作用是什么。比如最大值最小值总值那道题,最好适用max,min,sum这些命名,大部分同学都是这样的命名,保证代码的规范。还有就是在if,else if这种判断很多时的缩进,要让人一眼就看出每个if的下面是哪个语句。以及徐老师说过,最好不要用break,continue这些语句。希望大家在一开始写代码的时候就养成良好的习惯,会对之后的代码编程以及团队一起写代码的时候有很大帮助。下面是具体的每题出现的一些错误。

7-18

部分错误:很多同学都是部分错误,而且是在判断最大最小值的时候出现错误,可以将第一个数赋值给最大值max和最小值min,保证之后读入的每一个数都能与最大值最小值比较,然后根据比较大小更新最大值最小值。还有一些是在循环次数出错,有些同学是先读取了一个数,后面进循环的时候循环次数自然要少一次。在初始给max赋值一个很小的值,min赋值一个很大的值也是不合适的。

编译错误:想用数组来存储读进的数,但直接写出 int n; int a[n]; 只是不被允许的,因为n不是一个确定的值,不能知道给a[n]具体分布多大的空间。

7-19

逻辑错误:在字母不是x,y,z和X,Y,Z的时候转换的字母直接是ASCII码+3,而是这几个字母时就不是ASCII码+3了,需要单独考虑。

编译错误:在读取字符char类型时,可以用char=getchar(),也可以scanf("%c",&char)。循环的条件是char!='\n','\n'的ASCII码是10,而不是换行符'\r',ASCII码是13。而且不能写出char=getchar()!='\n',可以写出(char=getchar())!='\n'或者char=getchar()&&char!='\n'。

编译错误:在判断一个字符与ASCII码的大小时,直接用字符就可以判断,比如char>='A',而不用将这个字符转换为int型再进行判断。

7-20

逻辑错误:考虑不周全。score<0||score>100而不是&&。

逻辑错误:保证不重复进行判断,每个if,else if独立。

7-21

逻辑错误:判断m的质数时,没有考虑(int)sqrt(m)这个因子。题目要求统计每一行的质数,忘记,统计完一行后,忘记变量清0。

题目的测试用例没有考虑数为0,1的情况,出于严谨性,建议在代码中加入这一特殊情况的处理。

逻辑错误: 循环条件编写不断,导致死循环。

在循环中使用break的同学注意,在循环中禁止使用break来跳出循环,希望循环只有一个入口和一个出口,通过修改循环条件可以同样达到一样的效果

使用goto的同学注意,不要使用goto语句来编程,遵循循环一个入口和一个出口。

运行超时:在判断一个数是否为素数时,不必判断其所有因子的个数,当它有两个以上因子时,必不是素数,所以可以修改循环条件来提前退出循环,避免超时。还可以通过判断数m在[2, (int)sqrt(m)]上是否有因子,如果有,必定不是素数。

编译错误:还是存在缺失分号的情况。

7-22

逻辑错误:变量未初始化就用于运算,代码逻辑错误, 注意审题,题目意思曲解。

编译错误: for语句语法错误。

运行超时: if语句错写为while语句,导致死循环。

7-23

逻辑错误:赋值运算符=错写为比较运算符==,这个错误好像经常犯,请同学们注意。逻辑错误,打印最后一行的逻辑错误。 题目要求行和列是通过用户输入指定的,不是固定的。

行列弄混,循环范围错误,注意编写for循环时候,循环的次数,[0, n)之间有n个数,[1,n]之间也是n个数,注意for循环的次数。

编译错误: 头文件写错,变量未定义就使用。

运行超时: 内外层使用同一个循环变量导致循环条件不可控,导致有些情况运行超时。

 

猴子吃桃问题:

有一堆桃子不知数目,猴子第一天吃掉一半,觉得不过瘾,又多吃了一只,第二天照此办理,吃掉剩下桃子的一半另加一个,天天如此,到第十天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个?

模型:

用\(a_i\)表示第\(i\)天的桃子数量。

  • 第一天桃子数为:\(a_1\)
  • 。。。
  • 第\(i\)天的桃子数\(a_i\)
  • 第\(i+1\)天的桃子数\(a_{i+1}=a_i/2-1\)
  • 。。。
  • 第\(10\)天的桃子数\(a_{10} = 1\),

则问题为:\(a_1=?\),如果\(a_{10} = 1\)。

 

钓鱼问题:

A 、 B 、 C 、 D 、 E 五人夜间合伙捕鱼,凌晨时都疲倦不堪,各自在河边的树丛中找地方睡着了。日上三竿, A 第一个醒来,他将鱼分作五份,把多余的一条扔回河中,拿自己的一份回家去了。 B 第二个醒来,也将鱼分作五份,扔掉多余的一条,拿走自己的一份,接着 C 、 D 、 E 依次醒来,也都按同样的办法分鱼,问五人至少合伙捕了多少条鱼?试编程序算出。

模型:

直接用A 、 B 、 C 、 D 、 E变量的值表示他们所看到的鱼的数量。

则:

  • \(B = 4 * (A - 1) / 5\) 
  • \(C = 4 * (B - 1) / 5\)
  • \(D = 4 * (C - 1) / 5\)
  • \(E = 4 * (D - 1) / 5\)

E把数量为\(E\)的鱼分成5份,还多一条鱼。所以

  • \(E \mod 5 = 1\)

常识告诉我们,\(E=6, 11, 16,...\)。

同时,上面的递推关系也表示了下列关系

  • \(D \mod 5 = 1\)
  • \(C \mod 5 = 1\)
  • \(B \mod 5 = 1\)
  • \(A \mod 5 = 1\)

分析题面描述“问五人‘至少’合伙捕了多少条鱼?”,所以,我们可以按最小值进行求解。

从\(E=6\)开始,不断迭代,尝试下列除法正好都能除尽,即上面的同余式均成立。

  • \(D=5*E/4+1\)
  • \(C=5*D/4+1\)
  • \(B=5*C/4+1\)
  • \(A=5*B/4+1\)

https://onlinegdb.com/ZveMaegHO

老师您看看这运行超时了有什么简便的方法么?

 

自行设计并打印输出:某年某月的日历。日历参考电脑系统的日历,格式自便。

注意点:

1,需要计算:闰年否?

2,需要计算:某月的天数?

3,需要计算:某月第一天的星期?

4,需要排版格式:???

5,一个星期输出后需要换行,

6,???

2
3
 
4
5
6
 
7
8
9
 
 
10
11
 
12
13
14
 
15
16
17
18
19

$$333.75y^6+x^2(11x^2y^2-y^6-121y^4-2)+5.5y^8+x/(2y)$$

where

\(x = 77617, y = 33096\)