面试算法题

来源:互联网 发布:淘宝hd版微淘在哪里 编辑:程序博客网 时间:2024/05/21 21:47

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