#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;
}
}
}
特別注意輸出是否少多空格,符號問題,反正我是吃了苦頭.....