鏈接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1876
題目描述:桌上有n(n<=50)張牌,從第一張開始,從上往下依次編號爲1~n。當至少還剩下兩張牌時進行以下操作:把第一張牌扔掉,然後把新的第一張牌放到整疊牌的最後。輸入每行包含一個n,輸出每次扔掉的牌以及最後剩下的牌。
題目比較簡單,注意輸出格式,當n=1時,“Discarded cards:”後沒有空格。
代碼如下(vs2012運行通過):
// 10935.cpp : 定義控制檯應用程序的入口點。
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <fstream>
using namespace std;
#define FILE
int _tmain(int argc, _TCHAR* argv[])
{
#ifdef FILE
ifstream in("data.txt");
ofstream out("output.txt");
cin.rdbuf(in.rdbuf());
cout.rdbuf(out.rdbuf());
#endif
int n;
while(cin>>n)
{
if(n==0)
break;
vector<int> data;
for(int i=0;i<n;i++)
{
data.push_back(i+1);
}
cout<<"Discarded cards:";
if(data.size()!=1)
cout<<" ";
while(data.size()>=2)
{
cout<<data[0];
if(data.size()!=2)
cout<<", ";
data.erase(data.begin());
data.push_back(data[0]);
data.erase(data.begin());
}
cout<<'\n'<<"Remaining card: "<<data[0]<<endl;
}
return 0;
}