题目描述
给定 N个三元组 (x,y,z),其中 x是整数,y是浮点数,z是字符串。
请你按照 x从小到大的顺序将这些三元组打印出来。
数据保证不同三元组的 x值互不相同。
输入格式
第一行包含整数 N。接下来 N行,每行包含一个整数 x,一个浮点数 y,一个字符串 z,表示一个三元组,三者之间用空格隔开。
输出格式
共 N行,按照 x 从小到大的顺序,每行输出一个三元组。
注意,所有输入和输出的浮点数 y 均保留两位小数。
解题思路
基础语法题的最后一道题qwq
因为是一个整体,开一个数组又不可能,所以想到了STL容器vector
因为是三元表达式所以嵌套一下就好了,首先定义tri为两个pair的嵌套(pair是模板,可一次储存两个元素)
然后开一个向量名为answer.接着引入三个数据类型,根据n的个数输入三元表达式,将三元表达式储存在向量里面
注意格式ans.push_back({a,{b,s}});,使用sort函数将向量ans进行排序,因为所有三元表达式都储存在一个向量里面
所以for循环按照位次输出即可(使用iomanip控制小数点为两位),最后输出方式其实是看的pair
C++ 代码
#include<iostream>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<vector>
using namespace std;
const int N = 114514;// 定义一个常量N为114514
typedef pair<int, pair<double, string >> tri;
// 定义一个名字tri,表示一个三元组,第一个元素为整数,
//第二个元素为一个由浮点数和字符串组成的pair
vector<tri> ans;//引入一个向量a用于存储排序后的元素
int n, a;
double b;
string s;
int main(){
cin >> n;
for (int i = 0; i < n; i++){
cin>>a>>b>>s;
ans.push_back({a, {b, s}});// 将读取的三元组添加到向量ans中
}
sort(ans.begin(), ans.end());// 使用标准库中的sort函数对向量ans进行排序
for (int i = 0; i < ans.size(); i++){
cout<<ans[i].first<<" "<<fixed<<setprecision(2)<<ans[i].second.first<<" "<<ans[i].second.second.c_str()<<endl;;
}
return 0;
}
篇章
上一篇:AcWing 26. 二进制中1的个数
https://www.acwing.com/solution/content/213289/
下一篇:语法基础课总复习
https://www.acwing.com/blog/content/39247/