当前位置 : 主页 > 编程语言 > java >

java经典算法-day6

来源:互联网 收集:自由互联 发布时间:2022-09-29
哈喽,各位小伙伴们好,我是喵手。 一、前言 正值金九银十好时节,又到了刷题月。xdm,有空的欢迎一起呀。无论你是挤公交还是坐地铁时间,随时随地皆可刷...你可以不用实操,你


哈喽,各位小伙伴们好,我是喵手。

一、前言

       正值金九银十好时节,又到了刷题月。xdm,有空的欢迎一起呀。无论你是挤公交还是坐地铁时间,随时随地皆可刷...你可以不用实操,你只需要看题思考,完后有空coding就好呀。接下来我要开启我的刷题之旅啦,喜欢的小伙伴欢迎点赞关注哦。

二、题目描述:

题目1:

求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。例如2 + 22 + 222 + 2222 + 22222(此时共有5个数相加),几个数相加有键盘控制。

题目2:

一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3。编程找出1000以内的所有完数。

三、思路分析:

题1分析:

       找出规律,222 = 22*10+1;2222 = 222*10+2,其实就是后一个数 都在第一个数(start)上加start+10*num,其中num为上一次的叠加数。 

题2分析:

       看这题,首先要知道一件事,什么是完数,知道完数的算法规则,其实就能很清晰的计算出1000以内符合规则的数字,对吧。

      那什么是完数?完数其实就是一个数如果恰好等于它的因子之和,这个数就称为"完数"。比如6,所以所有因子[1,2,3]相加(1+2+3)就等于6.

      知道了规则,那其实就成功了百分之八十,因为我之前有讲过求一个数的所有因子。

四、算法实现:

题1AC代码:

public static int sumNums(int num, int count) {

//记录输入的num
int start = num;
//记录和
int sum = 0;
for (int i = 1; i <= count; i++) {
sum += num;
//计算出下一个数字。
num = start + num * 10;
//丢弃最后一个“+”号
if (i == count) {
System.out.print(num);
} else {
System.out.print(num + "+");
}
}
System.out.println("=" + sum);
return sum;
}

题2AC代码:

/**
* 计算1-1000之内的所有完数
*/
public static List<Integer> ws() {

//统计完数
List<Integer> list = new ArrayList<>();

//记录一个数的因子之和
int sum;

//循环1-1000之内的数
for (int i = 1; i <= 1000; i++) {

//判断该数是否为一个完数
sum = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0) {
//叠加因子之和
sum += j;
}
}
//判断是否为完数
if (sum == i) {
list.add(i);
}
}
return list;
}

五、总结:

综上,这两道第一道是找规律,在每一个数的基础上进行结果叠加。第二道就是数学题,结合数学规律进行解题即可。

如果你有更好的解题思路或者想法,欢迎评论区留言告诉我哦,喵手感激不尽。

六、文末:

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

---------------------------------------------------------------------

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

---------------------------------------------------------------------

网友评论