6 条题解

  • 3
    @ 2023-7-26 13:10:01

    解析

    直接对数据排序,数字的位置就被更新了,不妨使用结构体,给每个数字赋予两个关键词:数字大小、位置。 这样排序后即使结构体顺序改变了,输出保存的成员变量———位置,就可以得到答案。

    就像在班级中按照女生前男生后的顺序排队,但你本身的性别并不会因为排序而改变

    题解

    #include <iostream>
    #include <algorithm>
    using namespace std;
    struct Num
    {
        int num, id;
    } a[2010];
    bool cmp(Num x, Num y)
    {
        return x.num < y.num;
    }
    int main()
    {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i].num;
            a[i].id = i;
        }
        sort(a + 1, a + 1 + n, cmp);
        for (int i = 1; i <= n; i++)
            cout << a[i].id << " ";
        return 0;
    }
    
    
    #include <iostream>
    using namespace std;
    int n;
    int a[1005];
    int b[1005];
    int main()
    {
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i];
            b[i] = i;
        }
        //用选择排序对下标排序
        for (int i = 1; i <= n; i++)
            for (int j = i + 1; j <= n; j++)
                if (a[b[i]] > a[b[j]])
                    swap(b[i], b[j]);
        for (int i = 1; i <= n; i++)
            cout << b[i] << " ";
        return 0;
    }
    
    
    • 1
      @ 2024-3-24 15:39:23
      #include <iostream>
      #include <algorithm>
      using namespace std;
      struct data{
          int a,i;
      }a[1005];
      int main()
      {
          int n;
          cin>>n;
          for(int i=1;i<=n;i++){
              cin>>a[i].a;
              a[i].i=i;
          }
          sort(a+1,a+n+1,[](data x,data y){return x.a<y.a;});
          for(int i=1;i<=n;i++)cout<<a[i].i<<" ";
          return 0;
      }
      
      • 1
        @ 2023-9-2 17:45:47

        yasuo👀️

        困难的结构体

        #include <iostream>
        #include <algorithm>
        struct shu{int id,shu;}num[1005];
        int yasuo(shu a,shu b){return a.shu<b.shu;}
        int main(){
            int n,numn; std::cin>>n; for(int i=0;i<n;i++){std::cin>>numn; num[i]={i,numn};}
            std::sort(num,num+n,yasuo); for(int i=0;i<n;i++) std::cout<<num[i].id+1<<" ";}
        
        • 1
          @ 2023-7-27 17:12:09

          利用pair制作一个简单的结构体;来完成排序👀️

          (yasuo)

          #include <bits/stdc++.h>
          std::pair<int,int> a[1005];
          int main(){
              int n;std::cin>>n;
              for(int i=0;i<n;i++){
                  std::cin>>a[i].first;
                  a[i].second=i+1;}
              std::sort(a,a+n);
              for(int i=0;i<n;i++) std::cout<<a[i].second<<" ";
              return 0;}
          
        • 1
          @ 2023-7-26 22:05:28
          #include <iostream>
          #include <algorithm>
          using namespace std;
          
          //因为有多个数据,还有对应的下标,所以考虑用结构体做题
          struct num
          {
              int n,index;
              //n:对应数值,index:对应下标
          };
          num a[1005];//有多个数据,所以创个数组
          
          //要用排序,先写好cmp
          bool cmp(num a,num b)
          {
              return (a.n < b.n);//从小到大排序
          }
          
          int main()
          {
              int n;
              cin >> n;
              //获取数据
              for(int i = 1;i <= n;i++)
              {
                  cin >> a[i].n;
                  a[i].index = i;
              }
              //排序
              sort(a + 1,a + n + 1,cmp);
              //输出
              for(int i = 1;i <= n;i++)
                  cout << a[i].index << ' ';
              return 0;
          }
          
          • 0
            @ 2023-8-7 15:38:30
            #include<bits/stdc++.h>
            using namespace std;
            int main()
            {
                int o[10005], n[10005], a;//定义旧数组(没排序)和新数组(用于排序)一个
                cin >> a;
                for(int i = 1; i <= a; i++) cin >> n[i];//先将输入的所有值存在新数组里
                for(int i = 1; i <= a; i++) o[i] = n[i];//再将新数组的每个值赋给旧数组中
                sort(n+1, n+1+a);//新数组排序,旧数组仍是原来的值
                for(int i = 1; i <= a; i++)//遍历就数组的每个值
                {
                    for(int j = 1; j <= a; j++)//判断旧数组的每个值与新数组的每个值是否相等,新数组对应的下标并输出
                    {
                        if(o[i] == n[j])
                            cout << j << " ";
                    }
                }
                return 0;
            }
            
            • 1

            排序下标(无重复关键字)

            信息

            ID
            341
            时间
            1000ms
            内存
            256MiB
            难度
            3
            标签
            递交数
            744
            已通过
            380
            上传者