C语言I博客作业02

| 这个作业属于哪个课程 | 班级的链接 |
| ---- | ---- | ---- |
| 这个作业要求在哪里 | 作业要求的链接 |
| 这个作业的目标 | 提前预习循环结构,找出存在的疑问,主动去思考并解决。 |
| 学号 | 20208927 |

1.PTA实验作业

1.1 题目1 比较大小
题目内容描述:本题要求将输入的任意3个整数从小到大输出。输入在一行中给出3个整数,其间以空格分隔。
在一行中将3个整数从小到大输出,其间以“->”相连。

1.1.1 实验代码截图

1.1.2 数据处理

数据表达:根据题目要求定义整型变量a,b,c,由a,b,c赋值给x,y暂时存放变量换值。
数据处理:循环结构。(伪代码如下)
定义整型变量 输入三个数a,b,c
进入if嵌套循环
比较逐一比较三个数的大小
else if(a<c)
    x=c,y=a,a=x,c=y;
输出最后的结果

1.1.3 PTA提交列表及说明

Q1:编译正确,运行错误。
A1:else if的a<c的交换错误,换反了。
Q2:答案错误。
A2:未按题中格式输出,未以“->”相连。

1.2 题目2 百鸡问题扩展-N鸡问题
题目内容描述:N元钱买N只鸡,公鸡每只5元,母鸡每只3元,小鸡1元3只,N元钱必须刚好买N只鸡,而且鸡必须整只买,不能劈开买。有几种买法呢?
这就是N鸡问题。在一行中输出两个整数c s,中间用一个空格隔开,表示N元钱买N只鸡共有 c 种买法,且所有买法的公鸡数量之和是 s。
如果无解,则s为-1.

1.2.1 实验代码截图

1.2.2 数据处理

数据表达:变量c,s,n,d1,d2,d3。依题输入n的值,c,s遍历叠加,c1,c2,c3分别为公鸡,母鸡,小鸡的只数。整型数。
数据处理:循环结构。(伪代码如下)
定义整型变量
依题输入c,s
进入for嵌套循环
for (d1 = 0; d1 <= n; d1++)
然后进入if判断是否满足条件
if (5 * d1 + 3 * d2 + d3 / 3 == n && d1 + d2 + d3 == n && d3 % 3 == 0)
遍历循环后if-else循环判断c的大小
最后输出
printf("%d %d\n", c, s);

1.2.3 PTA提交列表及说明
!

Q1:编译正确,运行错误。
A1:鸡是完整的,忽略了鸡的不可分割,if循环条件应该对鸡的个数取和3的余数为0.
Q2:结果于答案依旧不符,只输出多次结果。
A2:printf的输出应在for、if外,所有结果遍历结束后输出。

1.3 题目3 将秒数转换成时分秒
题目内容描述:编写程序实现:从键盘输入一个以秒为单位的时间值整数,将其转换成时、分、秒的形式输出。输入代表总秒数的整数。
输出时、分、秒的整数值,以英文冒号分隔,最后换行。

1.3.1 实验代码截图

1.3.2 数据处理

数据表达:变量s,m,h,n。输入秒n的值,多次取余,相除,计算出s,m,h。整型数。
数据处理:顺序循环。(伪代码如下)
依题定义整型变量
运用数学方法先取余后取整
s=n%60,m=n/60,h=m/60,m=m%60;
最后输出
printf("%d:%d:%d\n",h,m,s);

1.3.3 PTA提交列表及说明

Q1:没有问题。

2.阅读代码

#include<stdio.h>
int p(int a,int b);
int main()
{
    int N,a=1,n,sum=0,de,i;
    scanf("%d",&N);
    for(i=p(10,N-1);i<p(10,N);i++)
    {
        n=1;
        a=i/p(10,N-n);
        sum=p(a,N);
        de=i-a*p(10,N-n);
        while(N-n>0){
            a=de/p(10,N-n-1);
            de=de-a*p(10,N-n-1);
            sum=sum+p(a,N);
            n++;
        }
        if(sum==i)
        {
            printf("%d\n",sum);
        }
    }
    return 0;
}
int p(int a,int b){
    int pow=1,j;
    for(j=1;j<=b;j++)
    {
        pow=pow*a;
    }
    return pow;
}

可以学习的就是,我自己的代码运行时,输入n=7,会出现运行超时的情况,但是如果是学习上面这个代码自定义一个幂函数的时候就能成功通过。
并且这个代码在求n位数时,没有选择一个一个取余(其实也是可以的,题目有给出n的小范围),但是这个代码用了一个for的循环,比暴力解法就更高级。

3.学习总结

3.1 学习进度条

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
11/2-11/8 26小时 500 循环嵌套,一维数组,二维数组 如何把问题简单化,灵活调用循环和函数
10.26-11.1 24小时 400 循环嵌套,选择排序,冒泡排序 排序很蒙,逆时针坍缩不懂
10.19-10.25 24小时 350 switch-case,循环

3.2 累积代码行和博客字数

时间 博客字数 代码行数
第八周 1052 5
第九周 1677 54
第十周 3252 138

3.3 学习感悟
从一开始花几个小时运行出hello,world,到现在飞快的学习循环,数组。发现自己一个代码在PTA运行出来并得分,真的需要两三天的努力,并且不断的找问题,靠自己看书百度去解决问题,努力拓宽自己在C语言的知识面。在CSDN学习别人的优化代码,看到别人的代码在对比起自己的暴力解决,为了得分而得分的码代码,明明一个for循环代码可以解决的问题,单一的用顺序结构真的非常麻烦。也深刻的感觉到了英语和数学在C语言的重要性,第一次作业的规划似乎并没有自己想好的那样在进行,在比同人低的起点,即使不说比别人更努力,至少别人能够轻松做到的,即使比别人付出百倍的努力也要全力去完成。

各位大佬请评论
谢谢

posted @ 2020-11-05 20:52  陈谦益  阅读(655)  评论(8编辑  收藏  举报