2011年4月2日 星期六

Java 程式 - 分禮物

每年的耶誕節,都會有交換禮物的活動。現在有一群人,要交換彼此的禮物,但是每個人都不能拿到自己準備的禮物,且每個都只有會拿到一件禮物,請問共有幾種情形,並把所有可能情形印出來。
輸入說明:
第一列輸入一個正整數n (<20)。其後有n列,每一列代表每個人,每一列之資料依序為人名、禮物名。請注意人名與禮物名為英文字母。

輸出說明:
第一列顯示出可以有k種資料,其後顯示1組解列,其資料按照原本人名輸入的順序排列,即人名和禮物名視為同一組,一列中會有很多組,組與組間用逗號區分,用人名與禮物名用空白分隔。
範例:

Sample Input:
Sample Output:
A1 GIFT1
B1 GIFT2
C1 GIFT3

2
A1 GIFT2,B1 GIFT3,C1 GIFT1
A1 GIFT3,B1 GIFT1,C1 GIFT2





import java.io.*;
public class Problem_4 {
    public static void main(String[] args) throws IOException
    {
        java.util.Scanner in = new java.util.Scanner(System.in);
        int input = in.nextInt();
  
        if(input < 20){
            String[] people = new String[input];
            String[] gift = new String[input];
            String[] mol = new String[input];
   
            for(int i=0;i<input;i++){
                String str1 = in.next();
                String str2 = in.next();
  people[i] = str1;
                gift[i] = str2;
                mol[i] = str2;
            }
            System.out.println(input);
            Pfun(mol, people, gift, 0);
        }else{
     //System.out.println();
        }
    }
    public static void Pfun(String[] mol, String[] people, String[] gift, int position)
    {
        if(position == (gift.length-1)){
            boolean success = true;
            for(int i=0;i<mol.length;i++){
                if(mol[i].equals(gift[i])){
                    return;
                }
            }
            for(int i=0;i<gift.length;i++){
                System.out.print(people[i] + " " + gift[i]);
                if(i != gift.length-1){
                    System.out.print(",");
                }
            }
            System.out.println();
        }else{
            for(int j=position;j<gift.length;j++){ 
                swap(gift, position, j);
                Pfun(mol, people, gift, position+1);
                swap(gift, position, j);
            }
        }
    }

    public static void swap(String[] list, int pre, int next)
    {
        String temp = list[pre];
        list[pre] = list[next];
        list[next] = temp;
    }
}

2 則留言:

  1. 你輸出的第一列錯了呦@@
    應該不是相等於input
    謝謝你張貼的解答 很受用^^

    回覆刪除
  2. oops !! 感謝指教!

    找時間改回來!!

    謝謝您

    回覆刪除