zoukankan      html  css  js  c++  java
  • 【C/C++】PAT A1025 Ranking/算法笔记

    题目意思大概是输入一堆人的学号,成绩,给出学号,总排名,考场号,考场内排名。
    这是我第一次写的:

    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int maxn = 30005;
    
    struct Student
    {
       int registnum[13];
       int score;
       int rank_in_group;
       int group;
    };
    
    Student stu[maxn]; //创建数组用于存储
    
    bool cmp(Student a, Student b)
    {
       if(a.score != b.score) return a.score > b.score;
       else return a.registnum < b.registnum;
    }
    
    int main()
    {
       //输入
       int n, k, num=0;
       scanf("%d", &n);
       //fflush(stdin);
       for (int i = 1; i <= n; i++) //考场号
       {
          scanf("%d", &k);
          ///fflush(stdin);
          for (int j = 0; j < k; j++)
          {
             scanf("%d%d", &stu[num].registnum, &stu[num].score);
             stu[num].group = i; 
             num++;
          }
          //组内排名
          sort(stu + num - k, stu + num, cmp);
          //组内排号
          stu[num - k].rank_in_group = 1;
          for (int j = 1; j < k; j++)
          {  
             if (stu[num - k + j].score != stu[num - k + j - 1].score)
             {
                stu[num - k + j].rank_in_group = stu[num - k + j - 1].rank_in_group + 1;
             }
             else
             {
                stu[num - k + j].rank_in_group = stu[num - k + j - 1].rank_in_group;
             }
          }
       }
       printf("%d
    ", num); //总人数
       sort(stu, stu + num, cmp);
       int r = 1;
       for (int i = 0; i < num; i++)
       {
          if (i>0 && stu[i].score != stu[i-1].score) //避免出现数组访问问题
          {
             r = i + 1;
          }
          printf("%d %d %d %d
    ", stu[i].registnum, r, stu[i].group, stu[i].rank_in_group);
       }
    
       system("pause");
    }
    

    但是有问题,那个学号总是输入不对。后来一想是因为13位数字的数组,输入的话得一个一个输入(输入到每个位置)。
    但是直接int a[13]然后输入scanf("%d",&a)这样
    肯定只能输入到一个里面
    比如这段测试代码:

    (剩余的奇怪数字是因为没有清内存)
    然而13位的学号,对于单个是int型的数组来说,又超内存了
    int是一种数据类型,在编程语言C中,是用于定义整数类型变量的标识符。在一般的电脑中,int占用4字节,32比特,数据范围为-21474836482147483647[-2^312^31-1]
    然后就把改成了输入字符串数组,因为用scanf("%s",a)的话,他就会自己放进去了

  • 相关阅读:
    计算机组成原理
    爬取斗图
    视频爬取
    经典段子爬取
    爬取哈哈笑话
    爬取昵图网
    爬取校花网
    python操作docker
    正则表达式
    UUID
  • 原文地址:https://www.cnblogs.com/kinologic/p/14154916.html
Copyright © 2011-2022 走看看