C++信息学奥赛1176:谁考了第k名

58 阅读1分钟

image.png

#include <iostream>
#include <string>
using namespace std;
int main()
{
  int n, a;
  cin >> n >> a; // 输入整数 n 和 a

  int arr[n]; // 创建大小为 n 的整型数组 arr
  double btt[n]; // 创建大小为 n 的双精度浮点型数组 btt

  for (int i = 0; i < n; i++)
  {
    cin >> arr[i] >> btt[i]; // 依次读取元素到数组 arr 和 btt
  }

  // 使用冒泡排序按照 btt 数组的值进行降序排序,并同时调整 arr 数组顺序
  for (int i = 0; i < n - 1; i++)
  {
    for (int j = 0; j < n - 1; j++)
    {
      if (btt[j] < btt[j + 1]) // 如果当前元素的 btt 值比后面一个元素的 btt 值小,则交换位置
      {
        swap(btt[j], btt[j + 1]);
        swap(arr[j], arr[j + 1]);
      }
    }
  }

  printf("%d %g", arr[a - 1], btt[a - 1]); // 输出排在第 a 位的 arr 和对应的 btt 值
}

返回代码逻辑:

  1. 首先,从标准输入中读取两个整数 n 和 a。
  2. 创建一个大小为 n 的整型数组 arr 和一个大小为 n 的双精度浮点型数组 btt。
  3. 使用 for 循环,从标准输入中依次读取 n 对元素,并将第一个整数存入数组 arr 的对应位置,将第二个双精度浮点数存入数组 btt 的对应位置。
  4. 使用冒泡排序算法对数组 btt 进行降序排序,并同时调整数组 arr 的顺序,使得二者保持一一对应的关系。
  5. 使用 printf 函数,输出排在第 a 位的 arr 数组元素和对应的 btt 数组元素。
  6. 程序结束。