• 【9205】军事机密


    Time Limit: 2 second
    Memory Limit: 32 MB

    问题描述
    我军方截获的信息由n(n≤30000)个数字组成,因为是敌国的高端秘密,所以一时不能被破获。最原始的想法就是对这n个数进行从小到大排序,每个数都对应一个序号,然后对第i个是什么数感兴趣,现在要求编程完成。

    Input

    第一行是n,第二行是n个截获的数字,第三行是数字k,接着是k行要输出数的序号。

    Output

    k行序号所对应的数字。

    Sample Input

    5
    121 1 126 123 7
    3
    2
    4
    3
    
    

    Sample Output

    7
    123
    121
    
    

    【题解】

    先把数字快排,从小到大排,一遍,然后对于输入的i,输出a[i]就可以了。这题就是拿来练快排的。啦

    【代码】

    #include <cstdio>
    
    int n,a[30001];
    
    void input_data()
    {
        scanf("%d",&n); //输入n个数据
        for (int i = 1;i <= n;i++)
            scanf("%d",&a[i]);
    }
    
    void kp(int l,int r) //进行快排
    {
        int i = l,j = r,m = a[(i+j)/2];
        do
        {
            while (a[i] < m) i++;
            while (m < a[j]) j--;
            if (i <= j)
            {
                a[0] = a[i];a[i] = a[j];a[j] = a[0];
                i++;j--;
            }
        }
        while (i <= j);
        if (l < j) kp(l,j);
        if (i < r) kp(i,r);
    }
    
    void output_ans() //对于提问输出相应位置的数字就好了
    {
        int k;
        scanf("%d",&k);
        for (int i = 1;i <= k;i++)
            {
                int m;
                scanf("%d",&m);
                printf("%d
    ",a[m]);
            }
    }
    
    int main()
    {
        input_data();
        kp(1,n);
        output_ans();
        return 0;
    }
    


     

  • 相关阅读:
    find文件后cp、rm
    值得加分的
    对老师的评价
    关于Statement 与 PreparedStatement
    每日日报2021.1.14
    每日日报2020.1.12
    每日日报2021.1.11
    给自己算的加分项
    期末了,给老师提建议。
    每日日报2020 12/19
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632422.html
Copyright © 2020-2023  润新知