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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值