对于大家来说这个问题可能是"蔡"了一点,没办法,不懂就是不懂.
我想详细了解一下"出圈"的问题:即报数问题.打个比方说:十个人在一起报数,数为6,每当报到数6的人即退出.以此类堆,问最后一个人会是几号:这个问题曾经在很多地方提到过,但说的都不是很详细,我想请各们兄弟或是姐妹们帮个忙,跟我说的详细一点(写代码也可以,用c++写),本人非常感谢.(最好是用数组的方法,不用到指针,小弟万分感谢.).
我想详细了解一下"出圈"的问题:即报数问题.打个比方说:十个人在一起报数,数为6,每当报到数6的人即退出.以此类堆,问最后一个人会是几号:这个问题曾经在很多地方提到过,但说的都不是很详细,我想请各们兄弟或是姐妹们帮个忙,跟我说的详细一点(写代码也可以,用c++写),本人非常感谢.(最好是用数组的方法,不用到指针,小弟万分感谢.).
解决方案 »
- 如何获得Windows外壳Explorer.exe进程窗口的地址栏内容
- 初学网络编程,IP(TCP/UDP)通信问题,请高手指点
- 今晚坐火车,火车上干什么呢?不想找人说话。。。想一个人闷着玩.........
- 对话框的问题
- VC++中如何实现分页打印
- 为什么新窗口不响应消息?
- 要改好大一段程序,郁闷, 散分!
- 请大神帮忙 我用MFC ODBC连的数据库 表中无记录的时候 就会出现试图越过有效存储区域的错误 要怎么解决
- LPBYE与CString的转换?
- 难道我的电脑比别人的强,怎么我能运行的程序别的机子上运行时有问题?
- 各位DX,看了程序员杂志第二期对api hook有了很大的兴趣,自己试了一下,可是碰了很大的钉子
- 如何绕过消息直接画屏?给分!
int findsix(int a[],int num,int start)
{ int i=start,n=0; //初始化从start开始 n=找到的未剔除的个数
while (1)
{ if (i>=num) i=0; //转了一圈从头来
if (a[i]) //尚未剔除
{ n++;
if (n==6) break; //已经数到第6个退出循环
}
i++;
}
return i; //返回第6个所在的位置
}int OnlyOne(int a[],int num) //判断是否只有一个未剔除
{ int i,n=0,last; //last最后一个所在的位置
for (i=0;i<num;i++) if (a[i]) {n++; last=i+1;} //last++区别于位置0返回
if (n<=1) return last; //只有一个,返回位置
return 0; //未完
}void main(void)
{ int a[10];
int i,no=0;
for (i=0;i<10;i++) a[i]=1; //初始化为1,还未剔除
while (1)
{ no=findsix(a,10,no); //从no处开始找,找到后返回到no中
a[no]=0; //置为剔除标志0
printf("out %d\n",no+1); //序号加1 表示位置(从1开始)
i=OnlyOne(a,10); //判断剩1个否
if (i)
{ printf("last is %d\n",i); //最后一个
break; //退出while循环
}
no++; //从刚才剔除的位置后一个位置开始下一次
}
}