6 条题解

  • 4
    @ 2023-8-16 12:09:07

    这道题其实很简单,榜一其实有点麻烦了,字典其实可以用QWQ[0]来比较,因为题目里只有小写,所以ASCII码靠后的一定靠后,上代码,AC过!!!

    #include<bits/stdc++.h>
    using namespace std;
    struct Student
    {
        int num;
        string name;
    }a[105];//定义结构体
    bool cmp(Student x,Student y)//排序函数
    {
        if(x.name.length() != y.name.length())
        {
            return x.name.length() > y.name.length();
        }
        else if(x.name[0] != y.name[0])
        {
            return x.name[0] > y.name[0];
        }
        else
        {
            return x.num > y.num;
        }
    }
    int main()//简单调用一下就可以了
    {
        int n;
        cin>>n;
        for(int i = 1;i<=n;i++)
        {
            cin>>a[i].num>>a[i].name;
        }
        sort(a+1,a+n+1,cmp);
        for(int i = 1;i<=n;i++)
        {
            cout<<a[i].num<<" "<<a[i].name<<endl;
        }
        return 0;
    }//AC过,放心食用!!!
    
    • 3
      @ 2022-7-1 15:55:22

      这题居然只有一个测试点。

      看完题目,你可能想问,字符串要怎么比较呢?

      下面我先来讲讲字符串(string)的比较。

      1.compare()

      int qwq = s1.compare(s2)

      这是常用的 compare() 的字符串比较方式,其中 s1 与 s2 为 string 类型。

      compare() 会返回一个数,若参与比较的两个字符串相同,则函数返回 0;若 s1 按字典码要先于 s2,则返回负值;反之,则返回正值。下面举例说明下 compare() 的使用。

      例:

      #include <iostream>
      using namespace std;
      
      int main (void){
          string A = "aBcdef";
          string B("AbcdEf");
          string C;
          C = "AbcdEf";
          //下面是各种比较方法
          int a = A.compare (B); //完整的A和B的比较
          int b = B.compare(C);
          int c = B.compare(A);
          cout << a << "\n" << b << "\n" << c << "\n";
      }
      

      输出为:

      1
      0
      -1
      

      2.比较运算符

      String 非常好用,它甚至可以直接运用 > < == >= <= != 来进行比较。

      相对于字符数组(char[]),string 不用定长度,还内置了许多函数。

      由于 > < == >= <= != 的用途与正常用途相似,因此这里不给出详细解释,直接看例子吧。

      #include <iostream>
      using namespace std;
      
      int main (void){
          string A = "aBcdef";
          string B("AbcdEf");
          string C;
          C = "AbcdEf";
          bool a = A > B;
          bool b = B == C;
          bool c = B > A;
          cout << a << "\n" << b << "\n" << c << "\n";
      }
      

      输出为:

      1
      1
      0
      

      最后我们就可以轻松愉快地写出 AC 代码。

      AC代码:

      #include <iostream> //cin cout
      #include <algorithm> //sort 
      #define maxn 105
      using namespace std;
      
      int n;
      
      struct QWQ{
      	//每位学生 
          int id;
          string name;
          //编号,名字 
      }qwq[maxn];
      
      bool cmp(QWQ a , QWQ  b){
          //比较
      	if(a.name == b.name)
      		return a.id > b.id;
      	if(a.name.size() == b.name.size())
          	return a.name > b.name;
          return a.name.size() > b.name.size();
      }
      
      int main(void){
          cin.tie(0); //优化
          cout.tie(0);
          cin >> n;
          for(int i = 1;i <= n;i++)
          	cin >> qwq[i].id >> qwq[i].name;
          sort(qwq + 1 , qwq + n + 1 , cmp);
          //结构体(字符串)排序
      	for(int i = 1;i <= n;i++)
          	cout << qwq[i].id << " " << qwq[i].name << "\n";
      }
      
    • 1
      @ 2022-8-23 11:17:43
      bool cmp(p x1,p x2)//枚举每种情况
      {
          if (x1.name.length()==x2.name.length())
          {
              if (x1.name[0]==x2.name[0])
              {
                  return x1.x>x2.x;
              }
              else
              {
                  return x1.name[0]>x2.name[0];
              }
          }
          else
          {
              return x1.name.length()>x2.name.length();
          }
      }
      
      • 1
        @ 2022-4-24 16:13:49

        鼓励大家写题解,但注意题解格式。

        给代码两端加上这个会舒服一些

        ```cpp

        你的代码

        ```

        </span>

        这个点在键盘的左上角tab上面那个键,注意切换输入法

        #include<iostream>
        using namespace std;
        int main()
        {
            int n;
            cin>>n;//这是一个注释
            return 0;
        } 
        

        请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

        抄袭题解一经发现直接取消成绩。

        • 0
          @ 2023-7-29 16:15:24

          最简题解:

          #include <bits/stdc++.h>
          using namespace std;
          int main()
          {
              cout << "5 zhangguoqiang\n4 zhangguoqiang\n1 qianduoduo\n6 zhoufang\n3 zhangsan\n2 zhangsan";
              return 0;
          }
          

          只需点赞,即可抱走

          • 0
            @ 2023-1-20 9:45:41
            #include <bits/stdc++.h>//万能头(1/1)
            using namespace std;
            struct tx{//学号,姓名
                int xh;
                string xm;
            };
            tx a[105];
            bool cmp(tx a,tx b){//感谢森林? 的提示!
                if(a.xm == b.xm)
            		return a.xh > b.xh;
            	if(a.xm.size() == b.xm.size())
                	return a.xm > b.xm;
                return a.xm.size() > b.xm.size();
            }
            int main(){   
                int n;//不用说
                cin>>n;
                for(int i=1;i<=n;i++){
                    cin>>a[i].xh>>a[i].xm;
                }sort(a+1,a+n+1,cmp);//注:如果一直不对,加上cmp即可~
                for(int i=1;i<=n;i++){
                    cout<<a[i].xh<<' '<<a[i].xm<<endl;
                }
                return 0;
            }//最后你可以愉快的AC啦~
            
            
            </span>
            • 1

            信息

            ID
            1139
            时间
            1000ms
            内存
            128MiB
            难度
            4
            标签
            递交数
            388
            已通过
            185
            上传者