九度OJ-题目1167-数组排序-结构体数组排序
2017-06-29 18:31
239 查看
题目1167:数组排序
原题链接:http://ac.jobdu.com/problem.php?pid=1167题目描述:
输入一个数组的值,求出各个值从小到大排序后的次序。输入:
输入有多组数据。每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。
输出:
各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。样例输入:
4-3 75 12 -3
样例输出:
1 3 2 1来源:
2009年北京航空航天大学计算机研究生机试真题思路
创建结构体数组,用来保存输入的数和排名位置。然后先排下序,再依次输出即可。AC代码
#include<bits/stdc++.h> using namespace std; struct num{ int no; int val; }node[10005]; int input[10001]; bool cmp(num a,num b){//从小到大排序 return a.val < b.val; } int main(){ int n; while(~scanf("%d",&n)){ for(int i = 0;i < n;i++){ cin >> node[i].val; input[i] = node[i].val; //input数组保存原始输入数据顺序 } sort(node,node+n,cmp); int cur = 1;//记录排名(允许并列) node[0].no = 1; for(int i = 1;i < n;i++){ if(node[i].val == node[i-1].val){ node[i].no = cur; }else{ cur++; node[i].no = cur; } } int first = true; for(int i = 0;i < n;i++){//对于每个输入 for(int j = 0;j < n;j++){//去查查他在数组中的位置 if(input[i] == node[j].val){ if(first){ cout << node[j].no; first = false; }else{ cout << " " << node[j].no; } break; } } } cout << endl; } return 0; }
相关文章推荐
- 【九度】题目1167:数组排序
- 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ
- [九度oj]题目1349:数字在排序数组中出现的次数
- 九度oj1167数组排序
- 【九度】题目1349:数字在排序数组中出现的次数
- 九度_题目1349:数字在排序数组中出现的次数
- 九度oj 题目1346:会员积分排序
- 九度题目1014:排名 (结构体多级排序)
- 【剑指Offer面试编程题】题目1386:旋转数组的最小数字--九度OJ
- 题目1167:数组排序
- 【九度OJ】1167【快速排序】【计算名次】【C实现】
- 九度OJ 题目1130:日志排序
- 九度OJ 题目1099:后缀子串排序
- [九度oj]题目1351:数组中只出现一次的数字
- 【剑指Offer面试编程题】题目1516:调整数组顺序使奇数位于偶数前面--九度OJ
- 九度 题目1349:数字在排序数组中出现的次数
- 题目1167:数组排序
- 九度OJ 题目1066:字符串排序
- 题目1167:数组排序
- 九度OJ 题目1534:数组中第K小的数字(二分解)