黑马程序员--JAVA<四题经典编程题>--

——- android培训java培训、期待与您交流! ———-


第一题: 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

import java.util.ArrayList;

/*
 * 需求: 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
 * 思路:1.定义一个方法,方法的作用是为一个数从1开始到其本身之间求模
 *          模为0的则这个数是其质因数
 *      2.当模为0时,继续调用此方法,传入商的值。
 *      3.当全部不能整除时,剩下的就是其质因数。
 */
public class Test04 {

    public static void main(String[] args) {
        // 求555555的质因数
        new GetZhiYinShu(555555);
    }
}

class GetZhiYinShu {
    // 需要求质因数的正整数。
    private int number;
    // 用于存储质因数。
    private ArrayList<Integer> al = new ArrayList<Integer>();

    public GetZhiYinShu(int number) {
        super();
        this.number = number;
        getNumber(number);
        show();
    }

    /**
     * 这是一个获取质因数集合的方法,方便外界获取
     * 
     * @return 质因数集合
     */
    public ArrayList<Integer> getAl() {
        return al;
    }

    /**
     * 这是一个获取质因数的方法
     * 
     * @param number
     *            需要求质因数的正整数
     */
    public void getNumber(int number) {
        for (int i = 2; i <= number; i++) {
            if (number % i == 0) {
                getNumber(number / i);
                al.add(i);
                break;
            }
        }
    }

    /**
     * 这是一个在控制台打印质因数的方法
     */
    public void show() {
        StringBuffer sb = new StringBuffer();
        for (int i = al.size() - 1; i >= 0; i--) {
            if (i != 0)
                sb.append(al.get(i) + "*");
            else
                sb.append(al.get(i));
        }
        System.out.println(number + "=" + new String(sb));
    }
}

第二题:输入两个正整数m和n,求其最大公约数和最小公倍数。

import java.util.Arrays;

/*
 * 需求:输入两个正整数m和n,求其最大公约数和最小公倍数。   
 * 思路:1.定义一个方法,方法接收一个int类型的整数m,n,返回一数组
 *          从2~n找出m和n都能整除的数
 *          第一次找到后,重新调用此方法,传入m、n除以这个数的商
 *          把这个数加到数组中并跳出此循环
 *          返回此数组
 *      2.调用定义的方法,传入m和n。所得的数组为他们的公约数,最大值为最大公约数
 *      3.用m分别除以数组的每个元素,得的商再乘以n,得的值就是他们的最小公倍数。
 * */
public class Test06 {
    public static void main(String[] args) {
        new GetTest06(55, 77);
    }
}

class GetTest06 {
    // 定义数组,存储公约数。初始长度为20.
    int[] arr = new int[20];
    // 计数器
    int count = 0;
    // 需要求公约数和公倍数的两个整数。
    int m, n;

    public GetTest06(int m, int n) {
        super();
        this.m = m;
        this.n = n;
        getNum(m, n);
        getGongYueShu();
        getGongBerShu();
    }

    /**
     * 这是一个求两个数的公约数的方法,所得的公约数存入数组中。
     * 
     * @param m
     *            第一个正整数
     * @param n
     *            第二个正整数
     */
    public void getNum(int m, int n) {
        for (int i = 2; i < m; i++) {
            if (m % i == 0 && n % i == 0) {
                getNum(m / i, n / i);
                arr[count++] = i;
                break;
            }
        }
    }

    /**
     * 这是一个根据所得的公约数数组求最大公约数的方法
     */
    public void getGongYueShu() {
        Arrays.sort(arr);
        System.out.println("最大公约数:" + arr[arr.length - 1]);
    }

    /**
     * 这是一个根据所得的公约数数组求最小公倍数的方法
     */
    public void getGongBerShu() {
        for (int i : arr) {
            if (i != 0) {
                m /= i;
            }
        }
        System.out.println("最小公倍数:" + m * n);
    }
}

第三题:判断101-200之间有多少个素数,并输出所有素数。

/*
 * 需求:判断101-200之间有多少个素数,并输出所有素数。
 */
public class Test02 {
    public static void main(String[] args) {
        test02();
    }

    public static void test02() {
        int number = 100000000;
        int[] nums = new int[number / 10000];
        nums[0] = 2;
        int count = 0;
        // int count2 = 0;

        for (int i = 1; i <= number; i++) {
            nums = findNumber(nums, i);
            // nums2 = getNums(nums2,i);
        }

        for (int i : nums) {
            if (i == 0)
                break;
            if (i > 1) {
                count++;
                System.out.print("_" + i);
            }
        }
        System.out.println("一共有:" + count + "个素数");
    }

    /*
     * 思路:找到2~101间的素数,再把101~200间的数分别与这些素数求模, 模为0的不是素数。 2~101间素数的思路:从2开始,
     * 分别除在它之前的素数,能整除则非素数
     */
    static int[] getNums(int[] nums, int num) {
        if (nums[0] == 0) {
            nums[0] = 2;
        }
        int count = 1;
        for (int i = 0; i < nums.length; i++) {
            if (count == 0 || num == 1) {
                break;
            } else if (nums[i] != 0) {
                count = (num % nums[i]);
            } else {
                nums[i] = num;
                break;
            }
        }
        return nums;
    }

    /*
     * 定义一个找出素数的方法。 思想:一个数n如果没被x整除,则他不会被n/x以上的数整除。 只需要验证是否被素数整除,所以可以略过合数。
     * 找出的素数放入数组中
     */
    public static int[] findNumber(int[] numbers, int number) {
        if (number == 0)
            return numbers;
        if (number == 1) {
            numbers[0] = 1;
            return numbers;
        } else if (numbers[1] == 0)
            numbers[1] = 2;

        int x;
        for (int i = 1; i <= numbers.length; i++) {

            if (numbers[i + 1] != 0 && numbers[i] > number / numbers[i]) {
                while (true) {
                    if (numbers[++i + 1] == 0) {
                        numbers[i + 1] = number;
                        break;
                    }
                }
                break;

            } else if (number % numbers[i] != 0) {
                if (numbers[i + 1] == 0)
                    numbers[i + 1] = number;
                else
                    continue;
            } else
                break;
        }
        return numbers;
    }
}

螺旋矩阵

/*
需求:输出边为n的螺旋矩阵,比如n=5时:
    输出 n=5 的螺旋方阵
    1  2  3  4  5
    16 17 18 19 6
    15 24 25 20 7
    14 23 22 21 8
    13 12 11 10 9 

分析:
                区域2
区域1     1   2   3   4   5           
16              17  18  19          6
15  24                          20  7  区域3
14  23          22  21              8
13          12  11  10  9           
                区域4

观察可以得出:
定义一个二维数组用于存储区域内的数字。
i:行   j:列   对应位置的数字:number[i][j]
1.16、24--> i==j+1 && (i+1)*10<=(n+1)*10/2
    number[i][j] = number[i-1][j]+4*(n-j*2-1)  当索引<0时,值取0
2.区域1--> i>j+1 && (j+1)*10<(n+1)*10/2 && i<=(n-j-1)
    number[i][j] = number[i-1][j] - 1 当索引<0时,值取0
3.区域4--> (i+1)*10>(n+1)*10/2 && j<=i && j>n-i-1
    number[i][j] = number[i][j-1] - 1
4.区域2--> j>=i && j<=(n-i-1) 
    number[i][j] = number[i][j-1] + 1
5.区域3--> i>(n-j-1) && i<j
    number[i][j] = number[i-1][j] + 1

*/

class Show {
    Show() {
        int n = 9;
        int num;
        int[][] number = new int[n][n];

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                // 16、24
                if (i == j + 1 && (i + 1) * 10 <= (n + 1) * 10 / 2) {
                    number[i][j] = number[i - 1][j] + 4 * (n - j * 2 - 1) - 1;
                }

                // 区域1
                if (i > j + 1 && (j + 1) * 10 < (n + 1) * 10 / 2
                        && i <= (n - j - 1)) {
                    number[i][j] = number[i - 1][j] - 1;
                }

                // 区域4
                if ((i + 1) * 10 > (n + 1) * 10 / 2 && j <= i && j > n - i - 1) {
                    number[i][j] = number[i][j - 1] - 1;
                }

                // 区域2
                if (j >= i && j <= (n - i - 1)) {
                    if (j - 1 < 0)
                        number[i][j] = 1;
                    else
                        number[i][j] = number[i][j - 1] + 1;
                }

                // 区域3
                if (i > (n - j - 1) && i < j) {
                    number[i][j] = number[i - 1][j] + 1;
                }

                num = number[i][j];
                System.out.print(num + "\t");
            }
            System.out.println();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB“ 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张图解java.docx Addison.Wesley.Java.Concurrency.in.Practice.May.2006.chm Agile Java 测试驱动开发的编程技术.pdf Java 8 默认方法和多继承.docx Java NIO通信框架在电信领域的实践.docx java.png javaconcurrencyinpractice.pdf JavaEE学习笔记.pdf java_Java_学习笔记.pdf Java_Performance.pdf java代码效率优化.docx Java内存模型的历史变迁.docx Java在游戏服务器开发中的应用.docx java基础总结大全.txt Java开发与技术挑战——关于技术的技术思考.docx Java框架研发思考.docx Java程序员们最常犯的10个错误.docx java程序员的就业指导(重点).docx Java程序员面试宝典 .pdf java笔试题大集合及答案 Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc java面试书籍源码 Java面试文档题库 Java面试笔试题库.CHM Java面试问题集.pdf Java面试题以及答案(小生).pdf java面试题(题库全).doc JS 数据库答案.doc Land.the.Tech.Job.You.Love-人人都有好工作—IT行业求职面试必读.pdf Linux命令大全完整版.doc sql查询语句练习.doc Web服务器的工作原理.docx 依赖注入与JSR-330的参考实现——Guice.docx 关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师测试题.doc 广州传智播客JavaEE工程师测试题(带答案的).doc 应聘时最漂亮的回答.docx 当面试官问「你有什么要问我的吗」时,应该问什么?.docx 提高 Java 代码性能的各种技巧.docx 搜狗商业平台Java技术实践.docx 最新JAVA编程题全集(50题及答案).doc 百度历年笔试面试150题.docx 笔试1.doc 答案1.doc 细品这杯香浓的咖啡——阿里中间件高级专家沈询的Java之旅.docx 给你一次机会面试架构师 你会问什么问题?.docx 超全面:程序员跳槽神级攻略.docx 跳还是不跳,是一个问题——跳槽时该如何权衡?.docx 进入IT企业必读的324个JAVA面试题.pdf 阿里2015实习生-客户端笔试题目解析.docx 面试帮-IT面试宝典.apk 面试题 面试题库 高吞吐低延迟Java应用的垃圾回收优化.docx 黑马程序员入学Java精华总结.pdf
java面试笔试题库java学习比较开发教程互联网公司面试资料大全合集: 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张图解java.docx Addison.Wesley.Java.Concurrency.in.Practice.May.2006.chm Agile Java 测试驱动开发的编程技术.pdf Java 8 默认方法和多继承.docx Java NIO通信框架在电信领域的实践.docx java.png javaconcurrencyinpractice.pdf JavaEE学习笔记.pdf java_Java_学习笔记.pdf Java_Performance.pdf java代码效率优化.docx Java内存模型的历史变迁.docx Java在游戏服务器开发中的应用.docx java基础总结大全.txt Java开发与技术挑战——关于技术的技术思考.docx Java框架研发思考.docx Java程序员们最常犯的10个错误.docx java程序员的就业指导(重点).docx Java程序员面试宝典 .pdf java笔试题大集合及答案 Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc java面试书籍源码 Java面试笔试题库.CHM Java面试问题集.pdf Java面试题以及答案(小生).pdf java面试题(题库全).doc JS 数据库答案.doc Land.the.Tech.Job.You.Love-人人都有好工作—IT行业求职面试必读.pdf Linux命令大全完整版.doc sql查询语句练习.doc Web服务器的工作原理.docx 依赖注入与JSR-330的参考实现——Guice.docx 关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师测试题.doc 广州传智播客JavaEE工程师测试题(带答案的).doc 应聘时最漂亮的回答.docx 当面试官问「你有什么要问我的吗」时,应该问什么?.docx 提高 Java 代码性能的各种技巧.docx 搜狗商业平台Java技术实践.docx 最新JAVA编程题全集(50题及答案).doc 百度历年笔试面试150题.docx 笔试1.doc 答案1.doc 细品这杯香浓的咖啡——阿里中间件高级专家沈询的Java之旅.docx 给你一次机会面试架构师 你会问什么问题?.docx 超全面:程序员跳槽神级攻略.docx 跳还是不跳,是一个问题——跳槽时该如何权衡?.docx 进入IT企业必读的324个JAVA面试题.pdf 阿里2015实习生-客户端笔试题目解析.docx 面试帮-IT面试宝典.apk 面试题 面试题库 高吞吐低延迟Java应用的垃圾回收优化.docx 黑马程序员入学Java精华总结.pdf
1.方法中的内部类能不能访问方法中的局部变量,为什么? 2.分析运行结果,说明原理。(没有分析结果不得分) import java.util.ArrayList; class Data { int val; } public class Test { public static void main(String args[]) { Data data = new Data(); ArrayList list = new ArrayList(); for (int i = 100; i < 103; i++) { data.val = i; list.add(data); } for (Data d : list) { System.out.println(d.val); } } } 3.编写一个类,在main方法中定义一个Map对象(采用泛型), * 加入若干个对象,然后遍历并打印出各元素的key和value。 4.编写一个类,在main方法中定义一个Map对象(采用泛型), * 加入若干个对象,然后遍历并打印出各元素的key和value。 5.定义一个文件输入流,调用read(byte[] b)方法将exercise.txt * 文件中的所有内容打印出来(byte数组的大小限制为5)。 6.存在一个JavaBean,它包含以下几种可能的属性: 1:boolean/Boolean 2:int/Integer 3:String 4:double/Double 属性名未知,现在要给这些属性设置默认值,以下是要求的默认值: String类型的默认值为字符串 www.itheima.com int/Integer类型的默认值为100 boolean/Boolean类型的默认值为true double/Double的默认值为0.01D. 只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现 7.有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常, * 在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。 * 在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕捉异常的信息。 * 完成这个例子,请说出java中针对异常的处理机制。 8.编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 9.编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数, * 然后打印出这个十进制整数对应的二进制形式。 * 这个程序要考虑输入的字符串不能转换成一个十进制整数的情况, * 并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。 * 提示:十进制数转二进制数的方式是用这个数除以2, * 余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2, * 这次得到的余数就是次低位,如此循环,直到被除数为0为止。 * 其实,只要明白了打印出一个十进制数的每一位的方式 * (不断除以10,得到的余数就分别是个位,十位,百位), * 就很容易理解十进制数转二进制数的这种方式。 10.有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。 * 问:最后剩下的是100人中的第几个人?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值