怎么循环不了啊

来源:百度知道 编辑:UC知道 时间:2024/05/11 19:54:05
一道简单的退席问题,看看哪儿出问题了,只能输出前五退席顺序
#include <iostream>
using namespace std;

#define N 15 //到席人数
#define M 3 //每次计数到M时该人退席

int main()
{
int a[N],count=0,k=0;
for(int i=0; i!=N; ++i)
a[i]=1;
do{
for(int i=0; i!=N; ++i)
{
if(a[i]==1)
{
++k;
a[i]=0;
if(k==M)
{
++count;
k=0;
cout << "number" << count
<<": " << i +1<< "exit\n";
}
}
}
}while(count!=N);
system("pause");<

数组很难的做到数据修改的,因为C++不允许对数组大小做动态定义。要存取元素的话,使用vector更有效率。我做这个问题的时候,也是先用数组做,但是发现就算顺利实现循环的话,也做不到条件所求。因为在数完一轮之后,前面已经出席的元素依然会被计算进去,不能实现真正的出席。
下面的是我用vector做的,我做的是最大为10,这里改成15了.但我看书上说,像这样随机删除或添加元素,用list更有效率

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>

using namespace std;

int INDEX = 0;
int Index = 0;
int Marr[15] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int tmp[15];
vector<int> Mvec( Marr,Marr+15);
ofstream outfile( "Ovec_data.txt");

void add_erase(vector<int> &, int A[],int);

void add_erase(vector<int> &Mvec, int tmp[] ,int Index)
{
int i = 0;
for(;i < 14;i++)
{
if( Mvec.size() == 2)
{
tmp[i] = Mvec[1];
outfile << "Mvec[1]=" << Mvec[1]
<< endl <<"已成功赋值给tmp[" <<