ACM题目。。。求用C语言或C++写。。。最好有注释。。。

如题所述

#include<iostream>
#include<vector>
#include<string>
using namespace std;

int main()
{
int T=0;
cin>>T; //输入T
while(0!=T--)
{
int n=0,m=0;
cin>>n>>m; //输入n,m

vector<int> arr;
int size=0; //用size存储当前剩余人数
int flag=0; //用flag记录上一个数到m的人

for(int iLoop=0;iLoop<2*n;iLoop++)
arr.push_back(iLoop+1); //将1~2n的序号存入容器

size=arr.size();
for(int iLoop=0;size>n;iLoop++) //当剩余人数为n时结束
{
        //数到队尾后,接着从队首开始数
if(iLoop==size)
{
iLoop=0;
flag-=size;
}
//从flag位置的人开始,第m个人出列,并用flag记录这个人
if((iLoop-flag+1)==m)
{
flag=iLoop;
arr.erase(arr.begin()+iLoop); //出列操作
size--;
}
}
for(int iLoop=0;iLoop<n;iLoop++) //输出地球人的序号
{
cout<<arr[iLoop]<<" ";
}
}
return 0;
}

追问

实现不了。。。

追答

我这里本地测试没有问题,请问你实现不了是什么原因?或者什么现象?

追问

输入格式这样的。。。

追答

在出队操作的最后加一句iLoop--;就可以了,设计的时候没考虑m=1的情况。

追问

OK!能加你好友麽。。。新手,刚接触ACM。。。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-09
这种题目都挺有挑战性的,我喜欢,有空再来完善。
相似回答
大家正在搜