C语言I博客作业09
| |
---|:--😐---:
|这个作业属于那个课程| C语言程序设计II
|这个作业要求在哪里| https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/10028
|我在这个课程的目标是| 精通c语言
|这个作业在那个具体方面帮助我实现目标| 学会了循环的嵌套
|参考文献 |c语言程序设计
1.PTA实验作业(20分/题)
从PTA题目集中选出2个你最满意的题目完成以下内容,选择题目难度越大,分值越高,每题20分(每项5分),内容要求如下:
1.1 题目名1
7-2 换硬币 (20 分)
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
输入格式:
输入在一行中给出待换的零钱数额x∈(8,100)。
输出格式:
要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。
输入样例:
13
输出样例:
fen5:2, fen2:1, fen1:1, total:4
fen5:1, fen2:3, fen1:2, total:6
fen5:1, fen2:2, fen1:4, total:7
fen5:1, fen2:1, fen1:6, total:8
count = 4
1.1.1数据处理
#include"stdio.h"
int main()
{
声明变量 待换的零钱, 5分数, 2分数, 1分数, 硬币数, 情况数 = 0;
给待换的零钱赋值;
5分最多的情况 = (待换的零钱 - 2分 - 1分) / 5;
for ( 5分硬币从最多到一个的情况)
{
for (2分硬币从最多到一的情况)
{
1分数 = 待换的零钱 - 5 * 5分数 - 2 *2分数;
硬币数 =5分数 + 2分数 + 1分数;
情况数++;
printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n", 5分数,2分数,1分数, 硬币数);
}
}
printf("count = %d\n", 情况数);
}
1.1.2实验代码截图
1.1.3 造测试数据
|输入数据 |输出数据 |说明
|:--|:--😐:--😐--:
| 13 | fen5:2, fen2:1, fen1:1, total:4 fen5:1, fen2:3, fen1:2, total:6 fen5:1, fen2:2, fen1:4, total:7 fen5:1, fen2:1, fen1:6, total:8 count = 4 |题目所给
| 2 | count = 0 |c<8
| 8 | fen5:1, fen2:1, fen1:1, total:3 count = 1 |c=8
1.1.4 PTA提交列表及说明
本题在编程上没有什么问题,主要是硬币数量的各种情况的逻辑关系比较难理清,理清后叶就没什么问题了。
1.2 题目2
7-3 找完数 (20 分)
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
输入样例:
2 30
输出样例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
1.2.1 数据处理
int main()
{
int m, n, count = 0;
scanf("%d %d", &m, &n);
for (int i = m; i <= n; i++)
{
if (i == sum(i))//判断是否为完数
{
count++;//判断是否存在完数
printf("%d = ", i);
for (int j = 1; j < i; j++)
{
if (i % j == 0)
{
if (j == 1)
printf("1");
else
printf(" + %d", j);
}
}
printf("\n");
}
}
if (count == 0)
printf("None");
return 0;
}
int sum(int n)//判断是否为完数
{
int sum = 0;
for (int i = 1; i < n; i++)
{
if (n % i == 0)//判断是否为因子
sum += i;//将因子加起来
else
continue;
}
return sum;
}
1.2.2 实验代码截图
1.2.3 造测试数据
|输入数据 |输出数据 |说明
|:--|:--😐:--😐--:
| 2 30 | 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 |题目所给
| 2 4 | None |没有的情况
| 5 9 | 6 = 1 + 2 + 3 |有一组
1.2.4 PTA提交列表及说明
答案错误:由于没有将j=1的情况拿出来单独考虑,导致多输出了一个+
解决方法:将j=1的情况单独考虑
2.代码互评(5分)
找2份同学代码,和自己代码比较,建议互评代码尽量找代码风格差异较大。
同学代码截图
同学1
同学2
自己代码截图
1:这位同学将几个循环直接放在了一起,但是第三个for循环是多余的
2:这位同学可以将式子进行一下合并
3:我的代码就这两个的集合了
3.学习总结(15分)
3.1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第一周 | 2h | 72 | 输出 | 对于输出的符号还不熟 |
第二周 | 3.5h | 57 | 计算 | 算法陌生 |
第三周 | 3.5h | 81 | 分支结构 | 分支的逻辑理不清 |
第四周 | 1.5h | 180 | for循环,+= | 终止条件理不清 |
第五周 | 2h | 600 | 函数结构 | 对于算法的处理比较迷惑 |
第六周 | 2h | 1000 | 嵌套 | 对于嵌套的结构过多会解读的很吃力 |
第七周 | 2h | 1246 | switch结构 | switch结构里的case最后若是不加break会怎么样 |
第八周 | 3h | 1102 | while结构 | 字符的运用不熟 |
第九周 | 3h | 1002 | 循环嵌套 | 代码思维不够 |
3.2 累积代码行和博客字数(5分)
3.3 学习内容总结和感悟(5分)
3.3.1 学习内容总结
3.3.2 学习体会
通过本周的学习,我对于循环的嵌套有了更深一层的了解,而且通过做题我感觉到了写C语言题目时是很考验思维的,很多题目都需要
反向思维,顺着推的话总是会出现很多问题,所以我也需要更多练习来提升自己的反向思维能力。