close
Content
給你一副照順序放好的紙牌,其中卡片的編號從1~n,且1號排在最上面,n號牌在最底下。
只要這副牌還有兩張以上,你就必須照以下的規則操作:
丟掉最上面的那張牌,然後把目前最上面的那張牌放到牌堆的最下面。
你的工作是找出每張牌被丟掉的順序,以及最後剩下的那張牌。
Input
輸入的每一列包含一個整數 n≤50,當輸入為0時代表輸入結束,你不應該處理這個輸入。
Output
對每個輸入的數字產生兩列輸出,第一列是每張牌被丟掉的順序,第二列則是剩下的那張牌。
任何一列都不應該有任何前置或尾隨的多餘空白,輸出細節請參考sample output。
Sample Input #1
7 19 10 6 0
Sample Output #1
Discarded cards: 1, 3, 5, 7, 4, 2 Remaining card: 6 Discarded cards: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 4, 8, 12, 16, 2, 10, 18, 14 Remaining card: 6 Discarded cards: 1, 3, 5, 7, 9, 2, 6, 10, 8 Remaining card: 4 Discarded cards: 1, 3, 5, 2, 6 Remaining card: 4
python
#Discarded cards: 1, 3, 5, 7, 4, 2 #Remaining card: 6 from collections import deque while True: try: t=int(input()) if t==0:break que=deque([x for x in range(1,t+1)]) que.reverse() #print(que) ans=[] while len(que)>1: w=que.pop() ans.append(w) que.rotate(1) print("Discarded cards:",end=' ') print(*ans,sep=', ') print(f'Remaining card: {que.pop()}') except:break
C++:
#include <iostream> #include <queue> using namespace std; int main() { int n; while(cin>>n){ if(n==0)break; queue<int> que; for(int i=0;i<n;i++){ que.push(i+1); } /*-------------*/ cout<< "Discarded cards:"; for(int i=0;i<n-1;i++){ if(i!=0){cout<<",";} cout<<" "<<que.front(); que.pop();//丟棄上面那一張 que.push(que.front()) ; que.pop(); } /*-------------*/ cout<<"\n"; cout<< "Remaining card: " << que.front() <<"\n"; } return 0; }
文章標籤
全站熱搜
留言列表