这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | C语言I作业08 |
我在这个课程的目标是 | 掌握C语言 |
这个作业在那个具体方面帮助我实现目标 | 对循环语句的练习 |
参考文献 | 《C语言程序设计(第三版)》《算法笔记》 |
1.PTA实验作业
1.1 求整数的位数及各位数字之和
对于给定的正整数N,求它的位数及其各位数字之和。
输入格式:
输入在一行中给出一个不超过10的九次方的正整数N。
输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。
输入样例:
321
输出样例:
3 6
1.1.1数据处理
数据表达:本题用了四个整型变量,其中n表示输入的数,one表示n对10取余的每位数,sum表示每位数的和,count表示n的位数;
数据处理:
伪代码
Inout (n);
对count,sum进行初始化
while(n>0)
用n循环对10取余计算出各位数并将各位数相加求出sum以及没运算一次就count加一后n除以10取整;
Output (count sum)
end。
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
321 | 3 6 | 题目的测试样例 |
518 | 3 14 | 随机数 |
20192929 | 8 34 | 随机数 |
1.1.4 PTA提交列表及说明
提交列表说明:
1.答案错误:输入前没对sum初始化。。。令sum=0。
1.2 韩信点兵
在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:
- 按从1至5报数,记下最末一个士兵报的数为1;
- 再按从1至6报数,记下最末一个士兵报的数为5;
- 再按从1至7报数,记下最末一个士兵报的数为4;
- 最后按从1至11报数,最末一个士兵报的数为10;
请编写程序计算韩信至少有多少兵。
输入格式:
本题无输入
输出格式:
输出韩信至少拥有的士兵人数
1.2.1 数据处理
数据表达:本题用了一个整型变量n用来表示计算所得的人数。
数据处理:
伪代码
初始化n=1;
while(n)
if((n%5==1)&&(n%6==5)&&(n%7==4)&&(n%11==10)
如果n能除以5余1,除以6余5,除以7余4,且除11余10;
end
else
n=n+1;
如果n不能除以5余1,除以6余5,除以7余4,且除11余10,n就加一
返回到if
end
1.2.2 实验代码截图
1.2.3 造测试数据
无论怎么运行都是2111,
1.2.4 PTA提交列表及说明
提交列表说明:
1.正确:之所以写这道题是因为刚开始想了很久都没想清这题是干嘛,后来又想了很久才知道是要我求能除以5余1,除以6余5,除以7余4,且除11余10的最小数是多少,想明白后写就直接对了。
1.3挑战进阶题:整除光棍
这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。
提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。
输入格式:
输入在一行中给出一个不以5结尾的正奇数x(<1000)。
输出格式:
在一行中输出相应的最小的s和n,其间以1个空格分隔。
输入样例:
31
输出样例:
3584229390681 15
1.3.1 数据处理
数据表达:本题用了四个整型变量以及一个字符型数组,n为输入的数,len为光棍数的长度,m为光棍数,p为字符型数组的单元数。
数据处理:
伪代码
Input(n)
while (1)当为真时执行循环
len=len+1;计算光棍数位数
if(p||m/n)
a[p++]='0'+m/n;保存商,转化为字符
m%=n
end if;
if(m==0)
a[p]=' '将字符串要加上字符串结束符
Output(a,len)
end
now=now*10+1;![](https://img2018.cnblogs.com/blog/1807187/201911/1807187-20191116095033860-1521010468.png)
END
1.3.2 实验代码截图
1.3.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
31 | 3584229390681 15 | 题目的测试样例 |
23 | 48309178743961352657 22 | 随机数 |
21 | 5291 6 | 随机数 |
1.3.4 PTA提交列表及说明
1.正确:本题有两个关键点,一个是取余一个是乘10加1,其中取余用来判断能否整除,乘10加一是光棍数。
2.代码互评
同学代码截图
自己代码截图
- 1.由于最近在练习字符,数组和结构体,我在这道题上的数用的是字符表示;
- 2.该同学的解题思路清晰,过程简单,反而我用了字符还要转化什么的。
3.学习总结
3.1 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
7/7-7/13 | 10 小时 | 235 | 循环语句for的使用以及格式 | 无 |
8/14-8/20 | 8小时 | 197 | 定义全局变量 | 无 |
9/21-9/27 | 17小时 | 537 | 函数的调用 | 无 |
10/28-10/3 | 16小时 | 411 | 数据类型的回顾 | 无 |
11/4-11/10 | 24小时 | 1089 | 数组以及一些算法 | 无 |
12/11-12/17 | 8小时 | 453 | 结构体 | 无 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
上周末去了毅行,虽然走完后很锻炼自己,但本周过的很疲惫,什么也不想干,而且Dev编译器还出了问题,花了很多时间去试了各种编译器,但还是学习了结构体以及结构体数组的应用。周末调整。