4

I/p: 5278
Desired o/p: 527,278,785,852 (私は手動でこれを行いました)。ただし、数値が大きい場合は問題です。

注:出力は、組み合わせが繰り返されないようにする必要があります(つまり、上記の組み合わせでは、数字527で十分であり、出力で257や725などの組み合わせが可能になることは望ましくありません。

これどうやってするの?どんな手掛かり?

編集:1 つの重要なことは、入力桁が一意であることです。いつでも明確にするために、入力は 1123 0r 3455 のような値を持つことはできません。

4

5 に答える 5

3

ここにいくつかの例があります:

public class Combination {

    public static void main(String[] args) {
        StringBuilder builder = new StringBuilder("5278");
        String str;
        int lastIndex;

        if(builder.length() % 2 == 0) {
            lastIndex = builder.length() / 2;
        } else {
            lastIndex = builder.length() / 2 + 1;
        }
        str = builder.toString() + builder.toString().substring(0, lastIndex);

        for (int i = 0; i < builder.length(); i++) {
            System.out.println(str.substring(i, i + 3));
        }
    }
}

上記よりも簡単な方法で更新します(veredesmaraldとの会話に基づく)

public class Combination {

    public static void main(String[] args) {
        char[] digits = Integer.toString(123).toCharArray();
        for (int i = 0; i < digits.length; i++) {
            System.out.println("" + digits[i] + digits[(i + 1) % digits.length] + digits[(i + 2) % digits.length]);
        }
    }
}
于 2012-05-29T06:33:26.967 に答える
0
    Integer input = 5278;
    List<Character> digits = new ArrayList<Character>();
    for(char c : String.valueOf(input).toCharArray()) {
        digits.add(Character.valueOf(c));
    }
    int a  = 0;
    for(int i=0; i<digits.size(); i++){
        for(int j=0; j<digits.size(); j++){
            for(int k=0; k<digits.size(); k++){
                if(!digits.get(i).equals(digits.get(j)) && !digits.get(j).equals(digits.get(k)) && !digits.get(i).equals(digits.get(k))){
                    System.out.println(++a +": " + digits.get(i) + digits.get(j) + digits.get(k));                      
                }
            }
        }
    }
于 2012-05-29T06:32:08.953 に答える
-2

入力の桁をリストに入れ、このリストのインデックスを返すランダムジェネレーターを作成し、出力を形成します。

Integer input = 5278;
char[] digits = String.valueOf(input).toCharArray();

int numberOfTrinities = 4;
String result = "";
Random generator = new Random();
List<String> trinities = new ArrayList<String>();
while(trinities.size() < numberOfTrinities ) {
    String nextTrinity = "";
    for(int i = 0; i < 3; i++) {
        nextTrinity  += digits(generator.nextInt(digits.size()));
    }
    if(isUniqueDigitsTrinity(trinities, nextTrinity)) {
        trinities.add(nextTrinity);
    }        
}
String result = "";
for(String trinity : trinities) {
    result += trinity;
}
System.out.printl("Input: " + input + ", Result: " + result);

三位一体の一意の数字をチェックするためにこれを必要とします:

private boolean isUniqueDigitsTrinity(List<String> trinities, String candidateTrinity) {
    for(String existingTrinity : trinities) {
        String checker = existingTrinity;
        for(char candidateChar : candidateTrinity.toCharArray()) {
            checker.replace(candidateChar, '');
        }
        if(checker.length() <= 0) {
            return false;
        }
    }
    return true;
}
于 2012-05-29T06:12:34.783 に答える