內容 :
有一個惡名昭彰的故事:某部落酋長有n個俘虜(編號從1,2,3,……,n),他叫他們排成一個圈圈,然後開始數,第m 個人要被煮來吃掉(第一次從編號1的人開始數),按照此規則繼續下去,直到只剩下一個人,那一個人可以保留性命。例如:n=6, m=5則被吃掉的人的編號依序是5,4,6,2,3最號只有編號 1活了下來。Joseph 是個很聰明的人,他總是能挑到最後存留的位置,所以這件事才被披露出來。
現在假設共有2k個人,其中排在編號 1 到 k 的是好人,排在編號 k+1 到 2k 的是壞人,你的任務就是要找出一個最小的 m,使得在所有 k 個壞人被吃掉之前,沒有一個好人會被吃掉。
輸入說明 :
每行一個整數k(0<k<14), k=0 代表輸入結束。
輸出說明 :
根據輸入的 k,輸出 m
範例輸入 : 
3 4 0
範例輸出:
5 30
提示 :
* Luck 貓翻譯
標籤:
出處:
import java.util.Scanner;
public class UVAc108 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int[] table=new int[15];
int k;
for(int i=1;i<15;i++){
table[i]=solve(i);
}
while((k=sc.nextInt())!=0){
System.out.println(table[k]);
}
}
private static int solve(int k){
int people,suicide,m,count;
if(k==1) return 2;
people=2*k;
for(m=k;;m++){
if((m-1)%people>=k && (m-1)%people<2*k){ //k從0開始
suicide = (m-1)% people;
for(count=2;count<=k;count++){
suicide = (suicide + m - 1)%(people-count+1);
if(suicide<k||suicide>=2*k) break;
}
if(count==k+1)return m;
}
}
}
}
參考自:
http://edward15241.pixnet.net/blog/post/186310656-uva-305(%E2%98%85%E2%98%85%E2%98%85)joseph
http://edward15241.pixnet.net/blog/post/186310656-uva-305(%E2%98%85%E2%98%85%E2%98%85)joseph
沒有留言:
張貼留言