一群人从1开始报数,要求跳过含有7的数字,请问第几个人报到siro 2069磁力

public class Test {
public static void main(String[] args) {
// 创建一个ArrayList来存储所有的人对应的数字
ArrayList&Integer& list = new ArrayList&Integer&();
// 使用for循环,向集合中添加对应的数字
for (int i = 1; i &= 100; i++) {
list.add(i);
// 定义一个数字,来记录报的数
int count = 1;
// 循环所有的数字,通过下面条件删除,当集合中只有一个元素时候,结束循环
for (int i = 0; list.size() != 1; i++) {
// 当循环到末尾,即i=list.size(),需要重新开始数,所有把i=置为0,重新开始数数
if (i == list.size()) {
// 当数数时候,数到了14,就把14从集合中删去
if (count % 14 == 0) {
list.remove(i--);
// 继续开始往下数数,所以count继续加1
count++;
// 输出集合中最后剩下的元素,即最后剩下的人
System.out.println(list.get(0));
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:772次
排名:千里之外这一道题,在刚学完指针之后的第一个礼拜,无意间看到课后练习,就去思考,起先不会做,想了很久,只有一点思路,但是还是不能把代码完整的写出来,后来就去百度,看了贴吧,发现这是经典问题了,俗名猴子选大王,发现很多种方法,我就挑其中的一种符合我这种初学者的方法,不过贴吧没有注释,一开始不理解,估计也有很多跟我一样刚开始不理解的,晚上睡觉的时候想了许久,便理解了一点,这边分享一下我的理解:
#include&stdio.h&
int a[100];
int i,n,p=0,q;
printf("input number:");
scanf("%d",&n);
for(i=0;i&n;i++) a[i]=i+1;
for(i=0;;i++)
if(i==n) i=0; //当i++一直到n时,肯定有一些没有被选到,比如我们输入8,第一轮是3,6被赋值0,当i=8时,继续下一轮//
if(a[i]!=0) p++;//我们下面定义的是当循环到三时,就赋值0,所以这边等0的不考虑在内//
else continue;
if(p%3==0)//这个就是从0一直加,到三的倍数就赋值为0,从而就达到我们的目的//
{a[i]=0;q--;} //上面q=n;表明q==n,只有一个为0就减一,为下面做铺垫//
if(q==1) break; //当剩下最后一个就输出//
for(i=0;i&n;i++)
if(a[i]!=0)
printf("spare: %d\n\n",a[i]);
这样就可以运行了。这只是其中一种比较适合初学者,还有几种,这边分享给你们:
#include&iostream&
using namespace
int main()
int num[50];
int i,j,k,m,n;
cout&&endl&&"请输入总人数:"&&
for(i=0;i&n;i++)
*(p+i)=i+1;
//以1至n为序,给每个人编号
//i为每次循环时计数变量
//k为按1 2 3报数时的计数变量
//m为退出人数
while(m&n-1)
//当退出人数比n-1少时(即未退出人数大于1时)执行循环体
if(*(p+i)!=0)
//将退出人的编号置为0
i=0;//报数到尾后i恢复为0
while(*p==0)
cout&&"最后一个是"&&*p&&" 号!"&&
还有一种比较叼的:
#include &stdio.h&
int M = 3;
int main()
int n, s = 0;
scanf("%d", &n);
for (int i = 2; i &= ++i)
s = (s+M)%i;
printf("%d\n", s+1);
这个目前还看不懂,代码如此之少。
阅读(...) 评论()

我要回帖

更多关于 siro 2069 ed2k 的文章

 

随机推荐