64,646
社区成员
发帖
与我相关
我的任务
分享
#include<list>
struct Jo
{
int pos;
bool flag;
Jo(int nPos, bool bFlag):pos(nPos),flag(bFlag){}
};
class ResolveJo
{
list<Jo> mylist;
int step;
int count;
private:
bool Check( int& nPos) const
{
list<Jo>::const_iterator iter=mylist.begin();
int n=0;
while(iter!= mylist.end())
{
if(iter->flag)
n++;
if(n==count-1)
{
nPos=iter->pos;
return true;
}
return false;
}
}
public:
ResolveJo(int nCount,int nStep)
{
count=nCount;
step=nStep;
for(int i=0; i<count ;i++)
mylist.push_back(Jo(i,true));
}
void Solution()
{
list<Jo>::iterator iter=mylist.begin();
int m=0;
int targetPos;
do
{
if(Check(targetPos)) //只剩下一人
{
cout<<targetPos<<endl;
break;
}
//continue
if(iter->flag)
m++;
if(m==step)
{
iter->flag=false;
}
} while (1);
}
};
int main()
{
ResolveJo obj(12,3);
obj.Solution();
return 0;
}
*iter.flag 这样使用为什么是错误的,*iter返回的是 list中存放的类型。既然是存放数据,就可以使用.了,但是
编译无法通过??
#include "ring.h"
#include <iostream>
int main()
{
ring r;
for (int i=1;i<=21;++i)
r.push_back(i);
for (ring::iterator iter=r.begin(); r.Size()>1; iter=r.erase(iter))
{
for (int i=1;i<=4;++i)
++iter;
}
std::cout<<"最后留下来的是:"<<*(r.begin())<<" 号";
}
#include "ring.h"
#include <iostream>
int main()
{
ring r;
for (int i=1;i<=21;++i)
r.push_back(i);
ring::iterator iter=r.begin();
do
{
for (int i=1;i<=4;++i)
++iter;
iter=r.erase(iter);
}while(r.Size()>1);
std::cout<<"最后留下来的是:"<<*(r.begin())<<" 号";
}
//假设有n个人团团围做,从第1个人开始数数,数到第m个人时候,第m个人出列,
//然后继续从1开始数数,数到第m个人退出
#include <stdio.h>
#include <conio.h>
int i,k,t;
int n,m;
static char f[1001];//0该座位未出圈,1该座位已出圈
void main() {
while (1) {
printf("Input n m(1000>=n>=m>=1):");
fflush(stdout);
rewind(stdin);
if (2==scanf("%d%d",&n,&m)) {
if (1000>=n && n>=m && m>=1) break;
}
}
t=0;//已出圈总人数
i=1;//座位编号
k=1;//当前要数的数
while (1) {
if (0==f[i]) {
if (m==k) {
t++;
f[i]=1;
printf("%3d ",i);
if (0==t%10) printf("\n");
if (t>=n) break;
}
k++;if (k>m) k=1;
}
i++;if (i>n) i=1;
}
cprintf("Press any key ...");
getch();
}
bool Check( int& nPos) const
{
list<Jo>::const_iterator iter=mylist.begin();
int n=0;
while(iter!= mylist.end())
{
if(!iter->flag)
{
n++;
}
else
{
nPos = iter->pos;
}
iter++;
}
if(n==count-1)
{
return true;
}
return false;
}
struct Jo
{
int pos;
bool flag;
Jo(int nPos, bool bFlag):pos(nPos),flag(bFlag){}
};
class ResolveJo
{
list<Jo> mylist;
int step;
int count;
private:
bool Check( int& nPos) const
{
list<Jo>::const_iterator iter=mylist.begin();
int n=0;
while(iter!= mylist.end())
{
if(iter->flag)
n++;
if(n==count-1)
{
nPos=iter->pos;
return true;
}
return false;
}
}
public:
ResolveJo(int nCount,int nStep)
{
count=nCount;
step=nStep;
for(int i=0; i<count ;i++)
mylist.push_back(Jo(i,true));
}
void Solution()
{
list<Jo>::iterator iter=mylist.begin();
int m=0;
int targetPos;
do
{
if(Check(targetPos)) //只剩下一人
{
cout<<targetPos<<endl;
break;
}
//continue
if(iter==mylist.end())
iter = mylist.begin();
if(iter->flag)
m++;
if(m==step)
{
m = 0;
iter->flag=false;
cout<<iter->pos<<endl;
}
iter++;
} while (1);
}
};
int main()
{
ResolveJo obj(12,3);
obj.Solution();
return 0;
}