zoukankan      html  css  js  c++  java
  • 每日编程-20170328

    题目:对于一个由0..n的所有数按升序组成的序列,我们要进行一些筛选,每次我们取当前所有数字中从小到大的第奇数位个的数,并将其丢弃。重复这一过程直到最后剩下一个数。请求出最后剩下的数字。

    输入描述:
    每组数据一行一个数字,为题目中的n(n小于等于1000)。

    输出描述:
    一行输出最后剩下的数字。

    输入例子:
    500

    输出例子:
    255

    解答:

    直接用链表模拟了

     1 #include <iostream>
     2 #include <list>
     3 
     4 using namespace std;
     5 
     6 int calcLastN(int n) {
     7     list<int> l1;
     8     for (size_t i = 0; i < n+1; i++)
     9     {
    10         l1.push_back(i);
    11     }
    12     while (l1.size() != 1)
    13     {
    14         list<int> l2;
    15         while (l1.size() > 1)
    16         {
    17             l1.pop_front();
    18             if (l1.size() < 1)    break;
    19             l2.push_back(l1.front());
    20             l1.pop_front();
    21         }
    22         l1 = l2;
    23     }
    24     return l1.front();
    25 }
    26 int main() {
    27     int n;
    28     while (cin >> n)
    29     {
    30         cout << ((n <= 0) ? 0 : calcLastN(n))<< endl;
    31     }
    32 }
  • 相关阅读:
    模拟
    广搜——最优方案
    动态规划——背包
    动态规划——树规
    动态规划——区间
    fill 的用法
    状态压缩dp
    超大背包问题
    lower_bound
    弹性碰撞 poj 3684
  • 原文地址:https://www.cnblogs.com/linhaowei0389/p/6635695.html
Copyright © 2011-2022 走看看