c++对一组数排序,同时输出他们的名次,大小相同的整数名次要一致,
比如两个并列第一名出现时,第三个不和前面分数一样的人的排名应该是3而不是2
比如输入:
9
95 100 95 77 85 65 25 100 85
那么输出结果是:
排序后的整数:100 100 95 95 85 85 77 65 25
整数排名:1 1 3 3 5 5 7 8 9
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> ve;
int n;
cin>>n;
int num;
for(int i = 0;i < n;i++){
cin>>num;
ve.push_back(num);
}
sort(ve.begin(),ve.end(),greater<int>());//降序排列
int ve1[ve.size()];//定义一个静态数组
ve1[0]=1;//第一个元素一定排名第一
for(int i=1;i<n;i++){//i一开始指向第二个元素,每次遍历会将i和i-1的元素进行比较
//判断后面的元素是不是和前面不一样,不一样的话名次等于当前数组元素下标+1(数组下标从0开始)即可
if(ve[i]!=ve[i-1]){
ve1[i]=i+1;
}else ve1[i]=ve1[i-1];//元素一样的,名次就和上一次一样
}
cout<<"排序后的整数:";
for(auto v:ve)cout<<v<<' ';
cout<<endl;
cout<<"整数排名:";
for(int i=0;i<n;i++) cout<<ve1[i]<<' ';
return 0;
}