圓桌問題 (ArrayList+模擬)

圓桌上圍坐着2n我的。其中n我的是好人,另外n我的是壞人。若是從第一我的開始數數,數到第m我的,則當即處死該人;而後從被處死的人以後開始數數,再將數到的第m我的處死……依此方法不斷處死圍坐在圓桌上的人。試問預先應如何安排這些好人與壞人的座位,能使得在處死n我的以後,圓桌上圍坐的剩餘的n我的全是好人。

Input多組數據,每組數據輸入:好人和壞人的人數n(<=32767)、步長m(<=32767);Output對於每一組數據,輸出2n個大寫字母,‘G’表示好人,‘B’表示壞人,50個字母爲一行,不容許出現空白字符。相鄰數據間留有一空行。Sample Inputjava

2 3
2 4

Sample Outputspa

GBBG

BGGB

思路: 能夠先處理獲得好人的下標,這樣就差個輸出;輸出注意,50個字母一行,最後還不換行須要特判一下;還要注意每組數據換行

代碼:
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Scanner;
public class Main{
       public static void main(String[] args) {
             Scanner scan=new Scanner(System.in);
             while(scan.hasNext()){
                   int n=scan.nextInt();
                   int m=scan.nextInt();
                   ArrayList<Integer> v=new ArrayList<>();
                   for(int i=0;i<2*n;i++)  v.add(i);
                   //移除壞人,留下好人
                   int pos=0;
                   while(v.size()>n){
                         pos=(pos+m-1)%v.size();
                         v.remove(pos);
                   }
                   //輸出
                   int k=0;
                   for(int i=0;i<2*n;i++){
                           if(i>0 && i%50==0) System.out.println();
                           if(k<v.size() && v.get(k)==i){
                                 k++;
                                 System.out.print('G');
                           }
                           else System.out.print('B');
                   }
                   System.out.println();
                   if(2*n%50!=0) System.out.println();
             }
    }
}
相關文章
相關標籤/搜索