【C/C++】设有一个数组a,数组中存放的元素为0到N-1(N<=100)之间的整数,且a[i]!=a[j] (当i≠j时)。例如:N=6时,a=(4,3,0,5,1,2)。此时,数组A的编码定义如下: a[0]的编码为0,a[i]的编码为:在a[0],a[1],…a[i-1]中比a[i]的值小的个数(i=1,2,…,N-1) 所以上面数组a的编码为:B=(0,0,0,3,1,2)。 现在输入这n个整数对应的编码,输出它原来的数组(不能用函数来做,只能用数组来做、)
时间: 2024-03-25 13:38:22 浏览: 129
以下是一个用C++编写的程序,可以根据给定的编码还原原始数组:
```cpp
#include <iostream>
using namespace std;
int main() {
int n, code[100];
cout << "请输入编码个数:";
cin >> n;
cout << "请输入编码:";
for (int i = 0; i < n; i++) {
cin >> code[i];
}
int arr[100];
// 根据第一个元素的编码确定第一个元素的值
arr[0] = 0;
for (int i = 1; i < n; i++) {
arr[i] = code[i - 1] + arr[i - 1] + 1;
}
// 根据每个元素的编码和前面已确定的元素值,确定该元素的值
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (arr[i] >= arr[j]) {
arr[j] = arr[i] + 1;
}
}
}
// 输出还原后的数组
cout << "还原后的数组为:";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
该程序的思路与前面给出的函数版程序类似,只不过这里使用了数组来存储原始数组和编码。具体实现时,首先根据第一个元素的编码确定第一个元素的值,然后根据每个元素的编码和前面已确定的元素值,确定该元素的值。具体实现时,首先将第一个元素的值设为0,然后对于每个i (1 ≤ i < n),根据编码code[i - 1]和前面已确定的元素值arr[i - 1],可以计算出arr[i]。接下来,对于每个i (0 ≤ i < n),再从i + 1到n - 1的范围内遍历所有元素j,如果arr[i] >= arr[j],则将arr[j]设置为arr[i] + 1。最终得到的arr就是还原后的原始数组。
阅读全文