C语言I博客作业08

这个作业属于那个课程 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编译器还出了问题,花了很多时间去试了各种编译器,但还是学习了结构体以及结构体数组的应用。周末调整。

原文地址:https://www.cnblogs.com/lidinghong/p/11862710.html