每年的耶誕節,都會有交換禮物的活動。現在有一群人,要交換彼此的禮物,但是每個人都不能拿到自己準備的禮物,且每個都只有會拿到一件禮物,請問共有幾種情形,並把所有可能情形印出來。
輸入說明:
第一列輸入一個正整數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; } }
你輸出的第一列錯了呦@@
回覆刪除應該不是相等於input
謝謝你張貼的解答 很受用^^
oops !! 感謝指教!
回覆刪除找時間改回來!!
謝謝您