谋鬼 2022-02-26 20:30 采纳率: 100%
浏览 63
已结题

小明的数字表51nod求解答

课堂练习:小明的数字表 未完成
小明现在爱上了查询,他遇到了这样一个查询问题,给出 n 个数 (n<=100000),
有 q 个查询 (q<=100000),每组查询 3 个数:u v w,表示查找第 u 位 (个位为第1位,十位为第2位,依此类推)为数字 v 的所有数字中,第 w 小的数,如果这个数字不存在,输出“-1”。

注:不考虑所有数字中的前导 0。

输入格式
第一行输入一个n(n<=100000),表示数列的长度; 第二行n个正整数ai(0<=ai<=100000000); 第三行一个数字q(q<=100000)表示询问的次数; 下面q行,每行给出三个数字u,v,w,表示查找第u位为数字v的所有数字中,第w小的数。
输出格式
每个询问输出一个数字,查询不到输出“-1”。
输入样例
4
1 21 22 3
3
2 2 2
1 1 2
2 2 3
输出样例
22
21
-1
数据范围
n<=100000 0<=ai<=100000000 q<=100000
样例解释
第2位数字为2的数字包括 (21,22) 第 2 小的数字为22;

第1位数字为1的数字包括 (1,21) 第2小的数字为21;

第2位数字为2的数字包括 (21,22) 第3小的数字不存在,输出“-1”

  • 写回答

1条回答 默认 最新

  • fuill 2022-02-26 21:13
    关注

    解答如下

    #include <iostream>
    #include <string.h>
    #include <algorithm>
    #include <stdlib.h>
    using namespace std;
    int f(int n,int p)//返回n的第p位
    {
        char a[10];
        itoa(n,a,10);
        reverse(a,a+strlen(a));
        int r=a[p-1]-48;
        return r;
    }
    int main()
    {
        int n,p,j,u,v,w,t[100000],q,fz[100000],h=0;
        cin >> n;
        for(j=0; j<n; j++)
        {
            cin >> t[j];
        }
        cin >> q;
        while(q--)
        {
            h=0;
            cin >> u>>v >>w;
            for(j=0; j<n; j++)
                if(f(t[j],u)==v)
                    fz[h++]=t[j];
              sort(fz,fz+h);      
        if(w<=h)
            cout << fz[w-1] << endl;
        else
            cout << -1 << endl; 
        }
        return 1;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 创建了问题 2月26日

悬赏问题

  • ¥15 为什么nacos注册失败了呀?
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 游戏盾如何溯源服务器真实ip?
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL
  • ¥15 抖音看过的视频,缓存在哪个文件