程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Throwing cards away I,throwingcardsaway

Throwing cards away I,throwingcardsaway

編輯:C++入門知識

Throwing cards away I,throwingcardsaway



Throwing cards away I 
  Given is an ordered deck of n cards numbered 1 to n with card 1 at the top and card n at the bottom. The following operation is performed as long as there are at least two cards in the deck:
  Throw away the top card and move the card that is now on the top of the deck to the bottom of the deck. 
Your task is to find the sequence of discarded cards and the last, remaining card. 

Input  Each line of input (except the last) contains a number n ≤ 50. The last line contains ‘0’ and this line should not be processed. 

Output  For each number from the input produce two lines of output. The first line presents the sequence of discarded cards, the second line reports the last remaining card. No line will have leading or trailing spaces. See the sample for the expected format.

Sample Input

7 19 10 6 0

Sample Output

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   這題目的意思就是把把一張牌拿出來,第二張牌放到最後,如此循環直到還剩下最後一個張牌。 依次輸出拿出來的牌 在輸出剩下的一張牌         代碼如下:(新手參照書上的方法寫的,望各位海涵)    

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int n;
while(cin>>n&&n)
{
int a[100],b[100],c[1];
int i,j=0,head,tail;
head=0; //將head標記到隊列開頭
tail=n; //將tail標記到隊列最後一位的後一位,因為需要留一個位置給開頭的數
for(i=0; i<n; i++)
a[i]=i+1;// 1 2 3 4 5 6 7
if(n==1)
{
cout<<"Discarded cards:"<<endl;
cout<<"Remaining card: 1"<<endl;
}

else
{
while(head+1<tail) //這裡的判斷條件表示當a數組還沒有到一個數時,就循環下去
{
b[j++]=a[head]; //將第一個數賦給數組b,並且j由0開始增加
head++; //head向後移動一位,此時去掉了”第一個數“ 2 3 4 5 6 7
a[tail]=a[head]; //將第二個數移動到隊列最後 2 3 4 5 6 7 2
c[0]=a[tail]; //每次將最後一個數賦給長度為1的數組c,當還剩最後一個數時,c[0]就是剩下的數
tail++; //tail向後移動一位,為下一個移動到隊尾的數留位子
head++; //因為已經將隊列的第一個移動到了隊尾,所以head向後移動一位 3 4 5 6 7 2
}
cout<<"Discarded cards: ";
for(int k=0; k<=j-2; k++) //因為j++。當跳出while時,j還多加了1,所以多減個1
cout<<b[k]<<", ";
cout<<b[j-1]<<endl; //與上一條一樣
cout<<"Remaining card: ";
cout<<c[0]<<endl;
}


}

}

 

特別注意輸出是否少多空格,符號問題,反正我是吃了苦頭.....

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved