• 2017 网易有道研发内推笔试编程题 8.17


    15个选择题,每个2分,3个程序题,每个30.

    分析题目可以发现原始序列和之后的序列有一个对应关系。 比如队列的第二个数是第一个被输出的,所以输出是 1 2 ... n的话,对应的第二个数就是1 依次内推。我们可以从之后的序列出发进行同样的操作然后做个对应关系的映射还原回原始的序列

     1 #include "iostream"
     2 #include "queue"
     3 #define N 100005
     4 
     5 using namespace std;
     6 
     7 int n, a[N], b[N];
     8 
     9 int main() {
    10     int t;
    11     cin >> t;
    12 
    13     while (t--) {
    14         cin >> n;
    15         queue<int> q;
    16         for (int i = 1; i <= n; i++)
    17             q.push(i);
    18 
    19         int cnt = 0;
    20 
    21         while (!q.empty()) {
    22             int x = q.front();
    23             q.pop();
    24             q.push(x);
    25             x = q.front();
    26             a[++cnt] = x;
    27             q.pop();
    28         }
    29 
    30         for (int i = 1; i <= n; i++)
    31             b[a[i]] = i;
    32 
    33         for (int i = 1; i < n; i++)
    34             cout << b[i] << " ";
    35         cout << b[n];
    36         cout << endl;
    37     }
    38     return 0;
    39 }

    再开一个数组,模拟下,暴力就过了:

     1 #include "iostream"
     2 #define MAX 201
     3 typedef long long LL;
     4 
     5 using namespace std;
     6 
     7 int n, k;
     8 LL a[MAX], b[MAX];
     9 void solve(LL *a)
    10 {
    11     for (int i = 1; i <= 2*n; i++)
    12     {
    13         if (i <= n)
    14         {
    15                 b[2 * i - 1] = a[i];
    16         }
    17         else
    18                 b[2 * (i - n)] = a[i];    
    19     }
    20     for (int i = 1; i <= 2 * n; i++)
    21     {
    22         a[i]=b[i];
    23     }
    24 }
    25 
    26 int main()
    27 {
    28     int t;
    29 
    30     cin >> t;
    31     while (t--)
    32     {
    33         cin >> n >> k;
    34         for (int i = 1; i <= 2 * n; i++)
    35             cin >> a[i];
    36 
    37         while (k)
    38         {
    39             solve(a);
    40             k--;
    41         }
    42 
    43         for (int i = 1; i < 2 * n; i++)
    44         {
    45             cout << a[i] << " ";
    46         }cout<<a[2*n];
    47         cout << endl;
    48     }    
    49 }

  • 相关阅读:
    Java之this关键字的用法
    JavaSE 之 final 初探
    LinkedList 浅析示例
    HashSet 浅析示例
    ArrayList 浅析示例
    MySQL5.7 修改密码
    IE10 和 Chrome50 对日期 new Date() 支持的区别
    databtables 设置(显示)行号
    团队管理
    财务名称
  • 原文地址:https://www.cnblogs.com/SeekHit/p/5781971.html
Copyright © 2020-2023  润新知