发表于 2017-7-10 17:34:24

[华为]删数

时间限制:1秒 空间限制:32768K 热度指数:25561

本题知识点: 模拟
题目描述


有一个数组a顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。



输入描述:

每组数据为一行一个整数n(小于等于1000),为数组成员数,如果大于1000,则对a进行计算。




输出描述:

一行输出最后一个被删掉的数的原始下标位置。


输入例子:

8


输出例子:

6


#include<iostream>
#include<queue>
using namespace std;

int main()
   {
      int n;
      while(cin>>n)
            {
               if(n>1000)
                   n=1000;
               queue<int> dig_q;
               for(int i=0;i<n;++i)
                   {
                      dig_q.push(i);
                  
               }
               int count=0;
            while(dig_q.size()!=1)
            {
               if(count!=2)
                   {
                     int q_head=dig_q.front();
                     dig_q.pop();
                     dig_q.push(q_head);
                     count++;
                  
               }
            else{
                   dig_q.pop();
                   count=0;
               }
            }
            int res=dig_q.front();
            cout<<res<<endl;
               
      }
   return 0;
}
页: [1]
查看完整版本: [华为]删数