C语言之逆序数还原

逆序数还原

  • 欢迎进入我的C语言世界
    • 题目
    • 答案
    • 本题感悟

欢迎进入我的C语言世界

题目

Problem Description

有一段时间Eric对逆序数充满了兴趣,于是他开始求解许多数列的逆序数(对于由1…n构成的一种排列数组a,逆序数即为满足iaj的数字对数),但是某天他发现自己遗失了原来的数列,只留下之前计算过程中留下的各个数字对应的逆序数,现在请你帮他还原出原序列。

Input

数据有多组,请处理到文件结尾。

每组数据第一行为一个整数N(1<=N<=1000),表示该序列的数字个数。

第二行为N个整数,第i个数字表示排在ai之后比ai小的数字个数。

Output

输出为一行N个整数,表示原数列。

Sample Input

5
2 0 1 0 0

Sample Output

3 1 4 2 5

答案

下面展示 实现代码

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
using namespace std;
int a[1007];//用于存放输入数组 
int b[1007];//用于存放1-n的数字 
int main()
{
	int n;
	while(scanf("%d",&n) != EOF)
	{
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		for(int i = 0; i < n; i++)
		{
			cin >> a[i]; 
		}
		for(int i = 0; i < n; i++)
		{
			b[i] = i + 1;
		} 
		for(int i = 0; i < n; i++)
		{
			sort(b,b+n);
			if(i != n-1)
			{
				cout << b[a[i]] << ' ';
				b[a[i]] = n+1;
			}
			else
			{
				cout << b[a[i]] << endl;
			}
		}
	}
	return 0;
}

本题感悟

本块内容可能来自课本或其他网站,若涉及侵权问题,请联系我进行删除,谢谢大家啦~

这题看起来很水的样子,可是我太菜了。这题的思想很酷!

  1. sort排序以后,直接对排序后的素组用下标进行访问,直接就可以知道是第几大的数字了
  2. 还有一点就是格式的问题,最后一个不是空格而是回车

以上。

你可能感兴趣的:(C语言)