每年的耶誕節,都會有交換禮物的活動。現在有一群人,要交換彼此的禮物,但是每個人都不能拿到自己準備的禮物,且每個都只有會拿到一件禮物,請問共有幾種情形,並把所有可能情形印出來。
輸入說明:
第一列輸入一個正整數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 !! 感謝指教!
回覆刪除找時間改回來!!
謝謝您