Java面试经典编程题

1、有1,2,2,3,4,5这6个数字,用Java写一个main函数,打印出所有不同的排列,如:512234
要求: '4'不能在第三位, '3'与'5'不能相连

package com.test;
/**
 * 6个数字最小组合为122345
 * 最大组合为543221
 * 去除这中间规则不允许的即可
 */
public class PaiLie {
 
    private static String[] notExistNumber = new String[] { "0", "6", "7", "8", "9" };
    private static String[] mustExistNumber = new String[] { "1", "2", "2", "3", "4", "5" };
 
    private static boolean isValidNumber(String str) {
        // 检查是否有非法数字
        for (String number : notExistNumber) {
            if (str.indexOf(number) >= 0) {
                return false;
            }
        }
        // 检查是否是这六个数字的组合,不能有222222或者334422等
        for (String number : mustExistNumber) {
            int temp = str.indexOf(number);
            if (temp < 0) {
                return false;
            } else if ((str.indexOf(number, temp + 1) > temp) 
                                  && str.charAt(temp) != '2') {
                return false;
            }
        }
        // 检查4在不在第三位,是返回false
        if (str.charAt(2) == '4') {
            return false;
        }
        // 检查是否存在'3'与'5'相连,有返回false
        if (str.indexOf("35") >= 0 || str.indexOf("53") >= 0) {
            return false;
        }
        return true;
    }
 
    public static void main(String[] args) {
        for (int i = 122345; i < 543221; i++) {
            if (isValidNumber(String.valueOf(i))) {
                System.out.println(i);
            }
        }
    } 
}

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

package com.test;

public class WanShu {
    
    private static boolean isWanShu(int shu){
        int sum = 0;
        for (int i = 1; i < shu; i++) {
            if(shu%i==0){
                sum+= i;
            }
        }
        if(sum==shu){
            return true;
        }else{          
            return false;
        }   
    }
    
    public static void main(String[] args) {
        for (int i = 1; i < 1000; i++) {
            if(isWanShu(i)){
                System.out.println(i);
            };
        }
    }
}

3、当 n = 5 时,下列函数的返回值是:(A)

int foo(int n)
    {
        if(n<2)return n;
        return foo(n-1)+foo(n-2);
    }

A.5
B.7
C.8
D.1
解析:Result=foo(4)+foo(3)
foo(4)=foo(3)+foo(2)
foo(3)=foo(2)+foo(1)
foo(2)=foo(1)+foo(0)
foo(1)=1
foo(0)=0
所以foo(2)=1,foo(3)=2,foo(4)=3

4、下面程序输出的结果是(A)

static boolean foo(char c) {
        System.out.print(c);
        return true;
    }
    
public static void main(String[] args) {
        int i = 0;
        for (foo('A'); foo('B') && (i < 2); foo('C')) {
            i++;
            foo('D');
        }
} 

A. ABDCBDCB
B. ABDCDBCB
C. ABDBCDCB
D. ABDBCDCB
解析:首先,必定是ABDC打头,排除C、D,随后执行foo('B') && (i < 2)这一项,结果为B,可得出结果为A。执行顺序--foo('A')--foo('B')&&true--foo('D')--foo('C')--foo('B')&&true--foo('D')--foo('C')--foo('B')&&false--end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一...
    阿里高级软件架构师阅读 8,515评论 0 19
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 8,563评论 0 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,895评论 18 399
  • 1.幻想 幻想激发对成功的欲望,刺激达到目的的动力。 2.改变观念 做还没有做就把结局想成不好的结果,那怎么可能会...
    李红烨阅读 1,267评论 0 0
  • 从去年的九月份到现在貌似自己好久没有写过日记,因为以前的日记总是记录自己的不快乐,想有一个诉说的对象。因为我很明白...
    旅人未安阅读 1,703评论 0 1