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语言题目时是很考验思维的,很多题目都需要
反向思维,顺着推的话总是会出现很多问题,所以我也需要更多练习来提升自己的反向思维能力。
posted @ 2019-11-22 09:44  尭蔕  阅读(209)  评论(3编辑  收藏  举报