2015.3 有n个小朋友围城一圈,玩击鼓传花游戏

//2015.3   有n个小朋友围城一圈,玩击鼓传花游戏,将小朋友编号1-n,从1号开始传花,
//   每次传3个,拿到花的小朋友表演节目后退出,任给n,问最后一个小朋友的编号是多少。
 //   例如:5个小朋友,1号开始传花,第一个表演的是3号,第二个表演的1号,第三个表演的
 //   5号,第四个表演的2号。最后表演的4号。

 //思路:两种方法:
         //1,循环链表,传到后删除该节点,并且输出,知道最后一个。
         //2,建立一个标记访问的数组。知道所有元素均被访问输出为止。
         //我们用第二种方法。
 #include<iostream>
 #include<stdlib.h>
 using namespace std;

 int main()
 {
     int n,vis[50]={0};
     int i,j,t=0;
     cin>>n;


     for(i=2,j=0;i<n,j<n;i=(i+1)%n)  //从三号小朋友vis[2]开始。
     {
          if(vis[i]==0) t++;  //控制位,保证每过三个没被访问过。

         if((t%3)==1)

          {

             if(vis[i]==0)
            {

             cout<<i+1<<" ";
             vis[i]=1;




             }

             else
             {
                 while(vis[i]==1) i=(i+1)%n;
                 cout<<i+1<<" ";
                 vis[i]=1;
             }

             j++;

          }





     }







     return 0;
 }


 //显然此方法有点繁琐,用循环链表处理则会很清晰明了。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值