面试算法题
A、B均为一个五位数且满足以下条件:
1、 A+20085=B
2、A里面的所有数字不重复
3、B里面的所有数字不重复
4、A与B之间的数字不能重复
即A、B这两个五位数是由0~9十个数字组成的相互之间不重复的数且满足A+20085=B
求打印满足条件的A、B
public class sum { public static void main(String[] args) { for (int i = 10234; i < 99999-20085; i++) { char [] charArray = String.valueOf(i).toCharArray(); boolean boo = true; boo = checkOne(charArray); if (!boo) { continue; } int res = i+20085; char [] charArray02 = String.valueOf(res).toCharArray(); boo = checkOne(charArray02); if (!boo) { continue; } boo = checkTwo(charArray, charArray02); if (!boo) { continue; } System.out.println(i+"+"+20085+"="+res); } } /** * 检查charArray内部之间是否有重复 * @param 传递charArray字符数组 * @return 返回布尔类型,true表示没有重复,false表示有重复 */ public static boolean checkOne(char [] charArray){ boolean boo = true; for (int i = 0; i < charArray.length-1; i++) { for (int j = i+1; j < charArray.length; j++) { if (charArray[i]==charArray[j]) { boo = false; } } } return boo; } /** * 检查charArray和charArray02是否有重复 * @param charArray 传递charArray字符数组 * @param charArray02 传递charArray02字符数组 * @return 返回布尔类型,true表示没有重复,false表示有重复 */ public static boolean checkTwo(char [] charArray,char [] charArray02){ boolean boo = true; for (int i = 0; i < charArray.length; i++) { for (int j = 0; j < charArray02.length; j++) { if (charArray[i]==charArray02[j]) { boo = false; } } } return boo; } }
============================================================================================================================
public class mySum { public static void main(String[] args) { for (int i = 10234; i < 99999-20085; i++) { boolean boo = true; boo = checkOne(i); if (!boo) { continue; } int res = i+20085; boo = checkOne(res); if (!boo) { continue; } boo = checkTwo(i, res); if (!boo) { continue; } System.out.println(i+"+"+20085+"="+res); } } /** * 将一个5位整数拆分成五个0至9之间的数 * @param i 穿入的5位整数 * @return 返回一个长度为5的整数数组 */ public static int [] getArray(int i){ int [] getcount = new int [5]; int mpp = i; for (int j = 0; j < getcount.length; j++) { getcount[j] = mpp%10; mpp = mpp/10; } return getcount; } /** * 检查整数i之间的各个位数是否重复 * @param i 传入的整数参数 * @return 返回布尔类型,true表示不存在重复,false表示存在重复 */ public static boolean checkOne(int i){ boolean boo = true; int [] getcount = getArray(i); for (int l = 0; l < getcount.length-1; l++) { for (int k = l+1; k < getcount.length; k++) { if(getcount[l]==getcount[k]){ boo = false; } } } return boo; } /** * 检查m和n两个整数之间的各个位数之间是否重复 * @param m 传入的整数m * @param n 传入的整数n * @return 返回布尔类型,true表示不存在重复,false表示存在重复 */ public static boolean checkTwo(int m,int n){ boolean boo = true; int [] getcountm = getArray(m); int [] getcountn = getArray(n); for (int l = 0; l < getcountm.length; l++) { for (int k = 0; k < getcountn.length; k++) { if(getcountm[l]==getcountn[k]){ boo = false; } } } return boo; } }