锁定老帖子 主题:一道简单的Java面试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-29
shanga 写道 fernyabc 写道 我测试了,我这个可以,复杂度有,数据结构典型算法
class Prime { public static void main(String[] args){ boolean[] a = new boolean[100]; for (int i = 2; i < 100; i++) a[i] = true; for (int i = 2; i< 100; i++) { if(a[i] != false) for(int j = i; j*i<100; j++) a[i*j] = false; } for (int i = 2; i< 100; i++) { if (i < 100 && a[i]) System.out.println(i); } } } 你这个时间复杂度是NlgN?我日,有多少层for,时间大概就是n^层数 你可以数数括号,这三个for循环是并列的好不好。。。。。。。。。。。。。。。 |
|
返回顶楼 | |
发表时间:2011-06-29
jhcfe 写道 zhangyang6380006 写道 LZ您开玩笑呢吧,敢要这么多这个题目都没做出来?我写个试试
for(int i=1;i<100;i++) { if(i % 2) == 1) system.out.println(i+" 是质数"); else break; } 也不知道对不对,没测 2算质数吧,9难道也是质数。。。 for(int i = 2 ; i <= 100; i++){ int temp = 0; for( int j = 1;j <= i; j++){ if(i % j == 0){ temp++; } } if(temp == 2){ System.out.println(i); } } |
|
返回顶楼 | |
发表时间:2011-06-29
suiheart 写道 public static void main(String[] args) {
for (int i=2;i<100;i++){ if(i%2==1){ System.out.println("这个是奇数"+i); } } 这么写 有问题不? 肯定有问题啦 |
|
返回顶楼 | |
发表时间:2011-06-29
fernyabc 写道 shanga 写道 fernyabc 写道 我测试了,我这个可以,复杂度有,数据结构典型算法
class Prime { public static void main(String[] args){ boolean[] a = new boolean[100]; for (int i = 2; i < 100; i++) a[i] = true; for (int i = 2; i< 100; i++) { if(a[i] != false) for(int j = i; j*i<100; j++) a[i*j] = false; } for (int i = 2; i< 100; i++) { if (i < 100 && a[i]) System.out.println(i); } } } 你这个时间复杂度是NlgN?我日,有多少层for,时间大概就是n^层数 你可以数数括号,这三个for循环是并列的好不好。。。。。。。。。。。。。。。 大哥看准点,我说的是层 |
|
返回顶楼 | |
发表时间:2011-06-30
private boolean isPrime(int i){
boolean flag = true; for(int j = 2;j <= Math.sqrt(i);j++){ if(i % j == 0){ flag = false; } } return flag; } 如果使用打点的话,效率会高一些。 |
|
返回顶楼 | |
发表时间:2011-07-11
for (int i = 2; i < 100; i++) {
boolean b = true; for(int j=2;j<10;j++){ if(i!=j && i%j==0){ b=false; } } if(b){ System.out.println(i); } } |
|
返回顶楼 | |
发表时间:2011-07-11
最快的就是空间换时间,直接打印100以内的质数。其实这道题不同的答法还是能看出一些逻辑上的能力的。
|
|
返回顶楼 | |
发表时间:2011-07-11
for(int i=2;i<=100;i++)
{ boolean isPrime=true; for(int j=1;j<i;j++) { if(i!=j&&j!=1) { if(i%j==0) { isPrime=false; } } } if(isPrime) { System.out.println(i); } } |
|
返回顶楼 | |
发表时间:2011-07-14
for(int i=2;i<=100;i++){
boolean flag=false; for(int j=2;j<i;j++){ if(i%j==0){ flag=true; break; } } if(!flag){ System.out.println(i); } } } |
|
返回顶楼 | |
发表时间:2011-08-17
最后修改:2011-08-17
public class TestDemo { @Test public void primeNumber(){ int [] buf = new int[50];//用来存放1-100以内所有的质数,为什么数组长度为50,因为除了2其他偶数都不是质数。所以没有必要声明一个长度为100的数组 int count = 0;//计数器用来统计当前被验证数可被几个数整除 int index = 0;//数组下标 for(int i = 1 ;i<=100;i++){ for(int j = 1;j<=i;j++){ if(i%j==0){ if(++count>2){//如果count>2说明当前被验证的数i不是质数,直接跳出当前循环继续下一个数的判断。 break; } } } if(2==count){//count==2可能会写成count=2,当前写法写错了编译器会报错 buf[index]=i;//把质数存放到数组里 index++;//数组下标+1 }else{ count = 0;//计数器清零 } } //循环打印出所有的质数 for(int i = 0;i<index;i++){ System.out.print(buf[i]+" "); } } } |
|
返回顶楼 | |