没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
算出 num 个数内的质数
质数即大于 1 的一个自然数,这个数可以被 1 和自身整除,如算出 20 之内的质数,它们有
2,3,5,7,11,13,17,19 这样的数字。这道题也是面试过程中笔试常问的一道题。
这道题的其目的在于:
1. 看笔试者的数学还记不记得
2. 看笔试者平时的算法
因此答题有两种。
第一种,通用做法
[java] view plaincopy
1. public class prime {
2. public static boolean isPrime(int num) {
3. for (int i = 2; i <= Math.sqrt(num); i++) {
4. if (num % i == 0) {
5. return false;
6. }
7. }
8. return true;
9. }
10.
11. public static void main(String[] args) {
12. for (int j = 2; j <= 20; j++) {
13. if (isPrime(j)) {
14. System.out.println(j + " is a prime");
15. }
16. }
17. }
18.
19. }
这种做法是对每个 2--num 个数内的数,进行扫描,需要用到 2 个循环,其重复度高,效率
低下,因此我们还有一种更先进的做法。
“筛选"法
[java] view plaincopy
1. public class Prime2 {
2.
3. /**
4. * @param args
5. */
6. public static void main(String[] args) {
7.
8. int n = 20;
9.
10. int[] array = new int[n];
11.
12. for (int i = 2; i < n; i++) {
13.
14. array[i] = i;
15.
16. }
17.
18. for (int i = 2; i < n; i++) {
19. if (array[i] != 0) {
20.
21. int j, temp;
22.
23. temp = array[i];
24.
25. for (j = 2 * temp; j < n; j = j + temp) {
26. array[j] = 0;
27. }
28. System.out.println("\n");
29.
30. }
31.
32. }
33.
34. }
35.
36. }
它的原理就是把所有的偶数去掉后即留下质数。
约瑟夫环算法
假设有 20 个人手拉手围成一圈,顺时针开始报号,报到 3 的人出圈,然后继续往后报,报
到 3 的人出圈,依次把所有报到 3 的人都踢出圈,最后剩下一人也踢出圈,问先后被踢出
圈的那些人原来是圈内的几号?
不难不难,关键记住这个环的算法(有人看到这个”环“字,要笑了,打住,别想歪了,俗
人!)
环的算法即闭合算法,永远依次 1,2,3,4,5...20...1 再 2,3,4,5...20 这样一直转下去,
假设要让 20 以内的 20 个数以环型转起来,它的核心算法如下:
[java] view plaincopy
1. int flag=0;
2. while(true){
3. flag=(flag+1)%n;
4. }
即”取模运算“,循环继续。
有了核心算法,我们的问题就可以解决了,来:
[java] view plaincopy
1. public class JosephCircle {
2.
3. /**
4. * @param args
5. */
6. public void josephCircle(int n,int k){
7. int flag=0;
8. boolean[] kick = new boolean[n];
9. //set kick flag to False;
10. for(int i=0;i<n-1;i++){
11. kick[flag]=false;
12. }
13. int counter=0;
14. int accumulate=0;
15. while(true){
16. if(!kick[flag]){
17. accumulate++;
18. if(counter==n-1){
19. System.out.println("kick last person===="+(flag+1));
20. break;
剩余13页未读,继续阅读
资源评论
小小哭包
- 粉丝: 1900
- 资源: 3864
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功