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©;

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值