• 【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)的话,他就会自己放进去了

  • 相关阅读:
    项目中常用的19条MySQL优化技巧
    集群的session问题解决方案
    nginx实现多个域名共享80端口
    spring-boot-maven-plugin多模块install问题解决办法
    JAVA-基础(十) Swing
    JAVA-基础(六) Java.serialization 序列化
    JAVA-基础(六) Java.io
    JAVA 基础--开发环境IDEA 搭建
    JAVA-基础(五) 更多工具集
    JAVA-基础(四) Aarryas 数组
  • 原文地址:https://www.cnblogs.com/kinologic/p/14154916.html
Copyright © 2020-2023  润新知