在下面十进制算术问题中,十个不同字母的每一个代表着一个0-9中的数字,写出
一个程序发现所有的可能解决的方案: 
    MARK         A=1 W=2 N=3 R=4 E=5                   9147
+  ALLEN         L=6 K=7 L=8 M=9 S=0                 +16653
________                                          --------------
  WEISS                                               25800
              
小弟才疏学浅,刚学java不久,那位大xia能帮我个忙啊!不甚感激

解决方案 »

  1.   

    兄弟,你L=6又L=8?到底L等于几?6?
    I=8?我把你条件改一下(一一对应):A=1 W=2 N=3 R=4 E=5
    L=6 K=7 I=8 M=9 S=0程序如下:import java.util.HashMap;public class Test {
        static char[] chars = { 'S', 'A', 'W', 'N', 'R', 'E', 'L', 'K', 'I', 'M' };
        static HashMap hashMapC2D;
        static HashMap hashMapD2C;    public static void main(String[] strs) {
            String str1 = "MARK";        String str2 = "ALLEN";        System.out.println(plus(str1, str2));    }    public static String plus(String str1, String str2) {
            return getStringFromLong(getLongFromString(str1)
                    + getLongFromString(str2));
        }    public static long getLongFromString(String str) {
            long value = 0;
            for (int i = 0; i < str.length(); i++) {
                value += ((Integer) (hashMapC2D.get(str.charAt(i)))).intValue();
                if (i < str.length() - 1)
                    value *= 10;
            }
            return value;
        }    public static String getStringFromLong(long num) {
            StringBuffer sb = new StringBuffer();
            String str = Long.toString(num);
            for (int i = 0; i < str.length(); i++) {
                sb.append(hashMapD2C.get(str.charAt(i)));
            }        return sb.toString();
        }    static {
            hashMapC2D = new HashMap();
            hashMapD2C = new HashMap();        for (int i = 0; i < chars.length; i++) {
                hashMapC2D.put(chars[i], i);
                hashMapD2C.put(Character.forDigit(i, 10), chars[i]);
            }
        }}
      

  2.   


    题目是这样的
    在下面十进制算术问题中,十个不同字母的每一个代表着一个0-9中的数字,写出 
    一个程序发现所有的可能解决的方案:  例如:
        MARK         A=1 W=2 N=3 R=4 E=5                   9147 
    +  ALLEN         L=6 K=7 I=8 M=9 S=0                 +16653 
    ----------                                        -------------- 
       WEISS                                              25800 
                   
      

  3.   

    程序完成了。
    要求MARK+ALLEN=WEISS的话,结果如下:
    start...
    E=0, W=2, A=1, S=5, R=4, L=7, M=3, N=6, I=8, K=9
    E=0, W=2, A=1, S=5, R=4, L=7, M=3, N=9, I=8, K=6
    E=0, W=9, A=8, S=2, R=1, L=6, M=3, N=5, I=4, K=7
    E=0, W=9, A=8, S=2, R=1, L=6, M=3, N=7, I=4, K=5
    E=2, W=6, A=5, S=0, R=7, L=8, M=3, N=1, I=4, K=9
    E=2, W=6, A=5, S=0, R=7, L=8, M=3, N=9, I=4, K=1
    E=3, W=2, A=1, S=4, R=0, L=7, M=6, N=5, I=8, K=9
    E=3, W=2, A=1, S=4, R=0, L=7, M=6, N=9, I=8, K=5
    E=3, W=6, A=5, S=1, R=7, L=4, M=8, N=2, I=0, K=9
    E=3, W=6, A=5, S=1, R=7, L=4, M=8, N=9, I=0, K=2
    E=4, W=3, A=2, S=6, R=1, L=8, M=5, N=7, I=0, K=9
    E=4, W=3, A=2, S=6, R=1, L=8, M=5, N=9, I=0, K=7
    E=5, W=2, A=1, S=0, R=4, L=6, M=9, N=3, I=8, K=7
    E=5, W=2, A=1, S=0, R=4, L=6, M=9, N=7, I=8, K=3
    E=5, W=2, A=1, S=3, R=7, L=8, M=6, N=4, I=0, K=9
    E=5, W=2, A=1, S=3, R=7, L=8, M=6, N=9, I=0, K=4
    E=6, W=3, A=2, S=5, R=9, L=7, M=8, N=1, I=0, K=4
    E=6, W=3, A=2, S=5, R=9, L=7, M=8, N=4, I=0, K=1
    E=6, W=5, A=4, S=0, R=3, L=7, M=8, N=1, I=2, K=9
    E=6, W=5, A=4, S=0, R=3, L=7, M=8, N=9, I=2, K=1
    end.
    程序:import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Iterator;public class Test {    public static void main(String[] strs) {
            String str1 = "MARK";
            String str2 = "ALLEN";
            String str3 = "WEISS";        printResult(str1, str2, str3);    }    public static void printResult(String str1, String str2, String str3) {
            HashSet hashSetChar = new HashSet();
            for (int i = 0; i < str1.length(); i++) {
                hashSetChar.add(str1.charAt(i));
            }
            for (int i = 0; i < str2.length(); i++) {
                hashSetChar.add(str2.charAt(i));
            }
            for (int i = 0; i < str3.length(); i++) {
                hashSetChar.add(str3.charAt(i));
            }
            if (hashSetChar.size() > 10) {
                System.out.println("counter of Character > 10, no result.");
            }        HashMap hashMapC2D = new HashMap();
            HashSet hashSetDigit = new HashSet();        Object[] characters = hashSetChar.toArray();
            int i = 0;
            for (; i < characters.length; i++) {
                hashMapC2D.put(characters[i], i);
                hashSetDigit.add(i);
            }        System.out.println("start...");
            while (i >= 0) {
                if (i == characters.length) {
                    if (getLongFromString(str1, hashMapC2D)
                            + getLongFromString(str2, hashMapC2D) == getLongFromString(
                            str3, hashMapC2D)) {
                        System.out.println(toStringHashMapC2D(hashMapC2D));
                    }
                    i--;
                }            int digit = -1;
                Integer intDigit = (Integer) hashMapC2D.get(characters[i]);
                if (intDigit != null) {
                    digit = intDigit.intValue();
                    hashMapC2D.remove(characters[i]);
                    hashSetDigit.remove(digit);
                }            if (digit == 9) {
                    i--;
                } else {
                    while (digit++ < 9) {
                        if (!hashSetDigit.contains(digit)) {
                            break;
                        }
                    }
                    if (digit == 10)
                        i--;
                    else {
                        hashMapC2D.put(characters[i], digit);
                        hashSetDigit.add(digit);
                        i++;
                    }
                }
            }
            System.out.println("end.");    }    private static String toStringHashMapC2D(HashMap hashMapC2D) {
            StringBuffer sb = new StringBuffer();
            Iterator iteratorKey = hashMapC2D.keySet().iterator();
            while (iteratorKey.hasNext()) {
                Character character = (Character) iteratorKey.next();
                Integer digit = (Integer) hashMapC2D.get(character);
                sb.append(character);
                sb.append("=");
                sb.append(digit);
                sb.append(", ");
            }
            sb.delete(sb.length()-2, sb.length());
            return sb.toString();    }    public static long getLongFromString(String str, HashMap hashMapC2D) {
            long value = 0;
            for (int i = 0; i < str.length(); i++) {
                value += ((Integer) (hashMapC2D.get(str.charAt(i)))).intValue();
                if (i < str.length() - 1)
                    value *= 10;
            }
            return value;
        }
    }
      

  4.   

    简单说明一下:
    题目没有任何难度,程序也没有任何技巧。
    唯一的关键是System.out.println("start..."); 下面的while (i > = 0) {}循环--用一个循环和一个变量实现了回溯算法。
    本来,排列的算法用递归的话,程序会更清晰(初学者更容易看懂),但是考虑到资源和性能问题,还是用循环做了。
    当然,把回溯或者单函数递归的程序,改写成简单循环,本来也没有任何技巧可言,是程序员考试和
    高级程序员考试的基本功。
      

  5.   

    2楼,我在编译你给的程序时,可以通过,但是出现如下提示,为什么?什么意思?
    注意: Test.java 使用了未经检查或不安全的操作。
    注意: 要了解详细信息,请使用 -Xlint:unchecked 重新编译。还有,在我运行的时候,输出的格式和你给的不一样,同样的代码,为什么格式不一样呢?我的格式是这样的:start...
    S=0, I=2, M=8, R=3, K=1, A=4, W=5, N=9, L=7, E=6
    S=0, I=2, M=8, R=3, K=9, A=4, W=5, N=1, L=7, E=6
    S=0, I=4, M=3, R=7, K=1, A=5, W=6, N=9, L=8, E=2
    S=0, I=4, M=3, R=7, K=9, A=5, W=6, N=1, L=8, E=2
    S=0, I=8, M=9, R=4, K=3, A=1, W=2, N=7, L=6, E=5
    S=0, I=8, M=9, R=4, K=7, A=1, W=2, N=3, L=6, E=5
    S=1, I=0, M=8, R=7, K=2, A=5, W=6, N=9, L=4, E=3
    S=1, I=0, M=8, R=7, K=9, A=5, W=6, N=2, L=4, E=3
    S=2, I=4, M=3, R=1, K=5, A=8, W=9, N=7, L=6, E=0
    S=2, I=4, M=3, R=1, K=7, A=8, W=9, N=5, L=6, E=0
    S=3, I=0, M=6, R=7, K=4, A=1, W=2, N=9, L=8, E=5
    S=3, I=0, M=6, R=7, K=9, A=1, W=2, N=4, L=8, E=5
    S=4, I=8, M=6, R=0, K=5, A=1, W=2, N=9, L=7, E=3
    S=4, I=8, M=6, R=0, K=9, A=1, W=2, N=5, L=7, E=3
    S=5, I=0, M=8, R=9, K=1, A=2, W=3, N=4, L=7, E=6
    S=5, I=0, M=8, R=9, K=4, A=2, W=3, N=1, L=7, E=6
    S=5, I=8, M=3, R=4, K=6, A=1, W=2, N=9, L=7, E=0
    S=5, I=8, M=3, R=4, K=9, A=1, W=2, N=6, L=7, E=0
    S=6, I=0, M=5, R=1, K=7, A=2, W=3, N=9, L=8, E=4
    S=6, I=0, M=5, R=1, K=9, A=2, W=3, N=7, L=8, E=4
    end.
      

  6.   


    应该是HashMap和HashSet时,我没有写类型。因为考虑到用jdk1.3, jdk1.4的人也可以编译过俺的程序。
    第二个问题Hash本来就是不排序的,不同jvm下面run,结果就是可能不一样。