2021年07月11日习题
1、输入一个3位的整型数,输入其百位、十位及个位数;
1 | /** |
2、判断一个数是否是素数?
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;
参考资料
https://oi-wiki.org/math/prime/
https://blog.csdn.net/adamjy/article/details/23514531
1 | /** |
3、百分制转成等级制( 利用 if 和 swtich 两种语句格式写)
利用if
1 | /** |
利用switch
1 | /** |
5、企业发放的奖金根据利润提成。
企业发放的奖金根据利润提成。利润(I)
低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于 40万元的部,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%,
高于 100万元时,超过100万元的部分按1%提成,
从键盘输入当月利润I,求应发放奖金总数?
1 | public static void main(String[] args) { |
7、判断101-200之间有多少个素数,并输出所有素数。
与第2题重复了,见第二题
8、计算s=1+2+…+100。
1 | /** |
9、打印出所有的“水仙花数”
所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1 | /** |
10 找出1000以内的所有完数
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数
如果一个数恰好等于它的真因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。截至2018年,相关研究者已经找到51个完全数。
性质
所有的完全数都是三角形数。例如:6=1+2+3;28=1+2+3+…+6+7;496=1+2+3+…+30+31;8128=1+2+3…+126+127。
三角形数
第n个三角形数的公式是n(n+1)/2或者(2n+1)^(2)-1/8。
PerfectNumber.java
1 | public class PerfectNumber { |
参考资料
https://baike.baidu.com/item/%E4%B8%89%E8%A7%92%E5%BD%A2%E6%95%B0
http://c.biancheng.net/cpp/html/3324.html
11、求s=a+aa+aaa+aaaa+aa…a的值
其中a是一个数字。例如2+22+222+2222+22222
(此时 共有5个数相加),几个数相加有键盘控制。
1 | /** |
12、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
1 | public static void main(String[] args) { |
运行结果:
1 | 2/1 + 3/2 + 5/3 + 8/5 + 13/8 |
13、一个5位数,判断它是不是回文数。
14、输入一个数,判断它是不是回文数。
设n是一任意自然数。若将n的各位数字==反向排列==所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。
注意:
1.偶数个的数字也有回文数124421
1 | /** |
测试:输出10到10000内的所有回文数
1 | boolean isNotFirst = false; |
运行结果:
1 | 11,22,33,44,55,66,77,88,99,101,111,121,131,141,151,161,171,181,191,202,212,222,232,242,252,262,272,282,292,303,313,323,333,343,353,363,373,383,393,404,414,424,434,444,454,464,474,484,494,505,515,525,535,545,555,565,575,585,595,606,616,626,636,646,656,666,676,686,696,707,717,727,737,747,757,767,777,787,797,808,818,828,838,848,858,868,878,888,898,909,919,929,939,949,959,969,979,989,999,1001,1111,1221,1331,1441,1551,1661,1771,1881,1991,2002,2112,2222,2332,2442,2552,2662,2772,2882,2992,3003,3113,3223,3333,3443,3553,3663,3773,3883,3993,4004,4114,4224,4334,4444,4554,4664,4774,4884,4994,5005,5115,5225,5335,5445,5555,5665,5775,5885,5995,6006,6116,6226,6336,6446,6556,6666,6776,6886,6996,7007,7117,7227,7337,7447,7557,7667,7777,7887,7997,8008,8118,8228,8338,8448,8558,8668,8778,8888,8998,9009,9119,9229,9339,9449,9559,9669,9779,9889,9999 |
15、输入2个正整数m,n,求其最大公约数和最小公倍数。
参考资料
辗转相除法 求最大公约数
https://zhuanlan.zhihu.com/p/31824895
辗转相除法, 又名欧几里得算法(Euclidean algorithm),目的是求出两个正整数的最大公约数。它是已知最古老的算法, 其可追溯至公元前300年前。
这条算法基于一个定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和5的最大公约数。
有了这条定理,求出最大公约数就简单了。我们可以使用递归的方法来把问题逐步简化。
首先,我们先计算出a除以b的余数c,把问题转化成求出b和c的最大公约数;然后计算出b除以c的余数d,把问题转化成求出c和d的最大公约数;再然后计算出c除以d的余数e,把问题转化成求出d和e的最大公约数……
以此类推,逐渐把两个较大整数之间的运算简化成两个较小整数之间的运算,直到两个数可以整除,或者其中一个数减小到1为止。
求最小公倍数
两个正整数A、B,他们的最大公约数和最小公倍数的乘积就等于这两个数的乘积(A*B)。
最小公倍数=(A*B)/最大公约数
最小公倍数=两整数的乘积÷最大公约数
程序 辗转相除法求最大公约数
1 | public class GreatestCommonDivisor { |
https://baike.baidu.com/item/%E6%9C%80%E5%A4%A7%E5%85%AC%E7%BA%A6%E6%95%B0
16、请编程序打印出以下数列:1、1、2、3、5、8、13、…的前40项。每行输出4个数。(斐波那契数列)
https://zh.wikipedia.org/wiki/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0
$$
\begin{cases}
F_{0}=0 \\
F_{1}=1 \\
F_{n}=F_{n-1}+F_{n-2} (n \ge 2)
\end{cases}
$$
https://baike.baidu.com/item/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97
斐波那契数列由0和1开始,之后的斐波那契数就是由之前的两数相加而得出。首几个斐波那契数是:
1 | 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 ,610, 987 |
特别指出:0不是第一项,而是第零项。
求斐波那契数列第n项 递归实现
1 | /** |
求斐波那契数列第n项 循环实现
1 | /** |
缓存已经计算过得斐波那契数列的项
下次遇到已经计算过斐波那契数列项的直接返回,没有计算过得才计算。
1 | /** |
测试
1 | // 打印前40项斐波那契数列 |
运行结果
1 | 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155 |
17、输入x值,按照公式计算cos(x)的值,直到最后一项小于10^(-6)为止。
$$
\cos (x)=1-\frac{x^{2}}{2!}+\frac{x^{4}}{4!}-\frac{x^{6}}{6!}+…
$$
特殊cos值
$$
\cos 30^{\circ}=\cos \dfrac{\pi}{6}=\dfrac{\sqrt{3}}{2} \approx 0.8660254038
$$
$$
\cos 45^{\circ}=\cos \dfrac{\pi}{4}=\dfrac{\sqrt{2}}{2} \approx 0.7071067812
$$
$$
\cos 60^{\circ}=\cos \dfrac{\pi}{3}=\dfrac{1}{2}=0.5
$$
1 | private static double cos(double x) { |
测试
1 | System.out.println(cos(Math.PI / 6)); |
运行结果:
1 | 0.8660254042103523 |
18 、输入2个正整数m,n,求其最大公约数和最小公倍数。
1 | /** |
测试
1 | int a, b, gcd; |
运行结果
1 | 5和10的最大公约数为:5,最小公倍数为:10 |
19、编写一个程序,求如下值:
$$
1-\dfrac{1}{2}+\dfrac{1}{3}-\dfrac{1}{4}+\cdots+\dfrac{1}{99}-\dfrac{1}{100}
$$
1 | public class HW_19_Sum { |
运行结果:
1 | 1.0 |
20、编写一个程序,求e的值。
$$
e \approx 1+\dfrac{1}{1 !}+\dfrac{1}{2 !}+\cdots+\dfrac{1}{n !}
$$
1 | double e = 1; |
运行结果:
1 | 2.7182818011463845 |