这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | 作业要求 |
我在这个课程的目标是 | 会使用c语言进行编程序 |
这个作业在那个具体方面帮助我实现目标 | 写PTA作业,帮助自己进行总结 |
参考文献 | 【PTA 天梯赛】L1-046 整除光棍(除法模拟) |
1.PTA实验作业
1.1jmu-c-二进制转10进制
输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!
输入样例1:
11111111
输出样例1:
255
输入样例2:
34
输出样例2:
error input!
1.1.1数据处理
数据表达:定义整型变量n, i, sum, b, c,定义数组a,n用于输入数组a的下标,i用于for循环,sum算十进制的数,b用于判断输不输出十进制数,c为计算十进制数数组a的下标。
数据处理:
定义整型变量n, i, sum, b, c,定义数组a,n用于输入数组a的下标,i用于for循环,sum算十进制的数,b用于判断输不输出十进制数,c为计算十进制数数组a的下标。 do { n累加1; 输入个字符赋值给数组a[n]; } while (a[n] != '\n'); end while; n赋值给c; for i = 0 to n c累减1; if a[c] == '1' sum累加求十进制数; else if a[c] == '0' 跳到下次循环; else 输出error input!; 把0赋值给b; 跳出循环; end for if b == 1 输出sum十进制数;
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
11111111 | 255 | 二进制11111111转换成十进制为255 |
34 | error input! | 34不是二进制 |
101010 | 42 | 101010转成十进制为42 |
1.1.4 PTA提交列表及说明
提交列表说明:
部分正确1:我定义输入的二进制为整数型,然后数据爆了,后面改用字符型输入。
部分正确2:for循环结束条件错了,多了个等于,把等于去了就对了。
1.2 整除光棍
这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由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.2.1数据处理
数据表达:定义整型变量x,s,n,x为输入的数,s用于算光棍数除以x的,n用于计算光棍的位数。
数据处理:
定义整型变量x,s,n,x为输入的数,s用于算光棍数除以x的值,n用于计算光棍的位数。 输入x; while (s < x) 在s后面加1; n累加1; end while while (1) 输出s除以x的整型数; //这使用的笔算的方式,输出除以x得的整数,然后在余数后面加1在进行计算 把s除以x的余数赋值给s; if s == 0 { 跳出循环; } 在s后面加1; n累加; end while 输出n,光棍的位数;
1.2.2实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
31 | 3584229390681 15 | 所得的光棍数除以31为3584229390681且光棍的个数为15 |
9 | 12345679 9 | 所得的光棍数除以9为12345679且光棍的个数为9 |
1.2.4 PTA提交列表及说明
提交列表说明:
部分正确:我用的长整型后面加1,算到后面数据就爆了,后面百度,发现他们写这题是靠笔算的方法写出来的,取余数后在后面加1。
1.3爬动的蠕虫
一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?
这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。
输入格式:
输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。
输出格式:
在一行中输出蠕虫爬出井的时间,以分钟为单位。
输入样例:
12 3 1
输出样例:
11
1.3.1数据处理
数据表达:定义整型变量N, U, D, minute, sum,N为井深,U为向上爬1分钟的长度,D为休息1分钟下滑的长度,minute为蠕虫爬出来的时间,sum为蠕虫爬的长度。
数据处理:
定义整型变量N, U, D, minute, sum,N为井深,U为向上爬1分钟的长度,D为休息1分钟下滑的长度,minute为蠕虫爬出来的时间,sum为蠕虫爬的长度。 输入井深,向上爬1分钟的长度,休息1分钟下滑的长度; do { sum累加U; minute累加1; if sum < N { sum累减D; minute累加1; } } while (sum < N); 输出爬出洞所用的时间;
1.3.2实验代码截图
1.3.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
12 3 1 | 11 | 爬出12寸深的洞要11分钟 |
2 5 2 | 1 | 爬出2寸深的洞要1分钟 |
1.3.4 PTA提交列表及说明
提交列表说明:
部分正确:while的结束条件多了个等于,把等于去掉就行了。
2.代码互评
同学代码截图
自己代码截图
1.他的代码跟我的代码计算二进制转十进制的算法不一样,他是累成2再加1或0,我是用下标算法。 2.他是每输入一个字符处理一个字符,我是把字符都存下来了。 3.他的代码应该报错的,sum没有赋值,不知道为啥对了,pta这个运行环境还是有点不好啊,这串代码有问题都对了。
同学代码截图
自己代码截图
1.我们代码计算s的方法都一样的,用光棍数除以输入的数取整输出,再余数加1,继续除以输入的数取整输出。 2.我是先用一个while把光棍数加到大于输入的数,再进行取整输出,他的代码是一个while里面用if进行判断。
同学代码截图
自己代码截图
1.我们代码算时间的方法都是一样的 2.不同之处在于,我用的是do-while,他用的是while,我有结束条件,他是通过if判断然后跳出循环。
3.学习总结
3.1 学习进度条
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
这周学习了while,do-while语句,是循环的一种语句,主要用于没有给定循环次数的循环。
现在做题目都需要逻辑思维,我看了别的刷题网站,入门题目就要用到冒泡排序,能够想到到后面会有多难,我发现到后面就真的是在做数学题,有思路,会怎么去解决这个问题就能写出来。
while语句的一般形式为: while(表达式) 语句 其中表达式是循环条件,语句为循环体。
do-while语句的一般形式为: do 语句 while(表达式);