| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3076 人关注过本帖
标题:JAVA每周一题(2)——曾经诺西的笔试题
只看楼主 加入收藏
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
这道题目很有趣的,建议学编程的人都自己动手编编,编不出来去百度查查,然后贴出自己的答案
2010-06-26 15:14
taoyongxing
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2010-6-26
收藏
得分:10 
if((i==1||(i%2==0)||(i%3==0)||(i%5==0))&&(i%7!=0)&&(i%11!=0))
这样对么?
2010-06-26 22:23
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
楼上的理解错了啊,并不是只有7和11不行,14也不行,17也不行。要想得到所有的,可以用循环求因子,也可以用因子积。
while(i%2==0)
    i=i/2;
while(i%3==0)
    i=i/3;
while(i%5==0)
    i=i/5;
if(i==1)
    该数就是丑数。

因子积:2×2,2×3,2×5,或者3×5,3×2.反正就是由2,3,5相乘所得的数。
2010-06-26 22:50
taoyongxing
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2010-6-26
收藏
得分:0 
回复 13楼 linjx0123
你看清楚哦,14%7=0;17进不去
2010-06-26 23:05
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
回复 14楼 taoyongxing
晕晕,我说的17,是指17的2,3,5的倍数呀,也就是34,68,51,102,153等等,而且还不止,还有19的2,3,5倍数,还有好多好多
2010-06-27 11:26
suzaidu
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-6-27
收藏
得分:0 
谁知道画图工具怎么编写?跪求。。。。
2010-06-27 12:05
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
程序代码:
public class Perm {
    int count =0;
    int n=1;
   
    public void getAll(){
        while(true){
            int i=n;
            while(i%5==0){
                 i=i/5;
            }
            while(i%3==0){
                 i=i/3;
            }
            while(i%2==0){
                i=i/2;
            }
            if(i==1&&n!=1)
                count++;
            if(count==1500)
                break;
           
            n++;
        }
    }
   
    public static void main(String[] args) {
        Perm p = new Perm();
        p.getAll();
        System.out.println(p.n);
    }
}
程序代码:
public class Perm {
    private int a2=0,a3=0,a5=0;
    private int[] a = new int[1501];
   
    private void getNth(int n){
        a[0]=1;
        for(int i=1;i<=n;i++){
            int temp2 = 2*a[a2];
            int temp3 = 3*a[a3];
            int temp5 = 5*a[a5];
            int temp = temp2<temp3?temp2:temp3;
            temp=temp<temp5?temp:temp5;
            a[i]=temp;
            if(temp2==temp)
                a2++;
            if(temp3==temp)
                a3++;
            if(temp5==temp)
                a5++;   
        }
    }
   
    public static void main(String[] args) {
        Perm p = new Perm();
        p.getNth(1500);
        System.out.println(p.a[1500]);
    }
}
是不是这个题目有点难啊,还是大家太懒了呢。
我觉得写不出最优代码,也能写出最简单的那种呀。当时我笔试的时候,写的也是最简单的那种,主要是没有时间去考虑最优的。

这里我贴出我自己的代码,供大家参考一下吧。第一个程序是最简单的,效率很低,运行估计要等一分钟左右。其实在第二种还可以进行些小优化的,不过效果也不会很好。

2010-06-28 10:28
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
直接找因子啊  最后做比较   这个绝对正确  可是效率n地下
2010-07-02 10:27
syg5434
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:山沟沟
等 级:版主
威 望:10
帖 子:285
专家分:781
注 册:2010-2-28
收藏
得分:0 
经过向高人求助......才改进成下面的程序,效率很高,很强大,如下:
import java.util.LinkedList;
import java.util.Queue;
public class ChouShu {
    public static void main(String[] args) {
        Queue<Integer> q2 = new LinkedList<Integer>();
        Queue<Integer> q3 = new LinkedList<Integer>();
        Queue<Integer> q5 = new LinkedList<Integer>();
        q2.offer(1);
        q3.offer(1);
        q5.offer(1);
        int i = 1;
        for (int n = 1; n <= 1500; n++) {
            int i2 = q2.peek();
            int i3 = q3.peek();
            int i5 = q5.peek();
            i = Math.min(i2, Math.min(i3, i5));
            if (i == i2 && !q2.isEmpty())
                q2.poll();
            if (i == i3 && !q3.isEmpty())
                q3.poll();
            if (i == i5 && !q5.isEmpty())
                q5.poll();
            q2.offer(i * 2);
            q3.offer(i * 3);
            q5.offer(i * 5);
            // System.out.print(i+ ", ");
            // if(n % 20 == 0) System.out.println();
        }
        System.out.println(i);
    }
}

不要迷恋哥,嫂子会揍你。阿-弥-陀-佛--!
2010-07-08 09:17
aufish
Rank: 2
等 级:论坛游民
威 望:1
帖 子:59
专家分:94
注 册:2010-4-22
收藏
得分:0 
dsfs

[ 本帖最后由 aufish 于 2010-7-22 20:29 编辑 ]
2010-07-22 20:26
快速回复:JAVA每周一题(2)——曾经诺西的笔试题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027609 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved