对数组A中的N(1<N<=100)个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组A中元素的顺序,且相同的整数要具有相同的编号。例如数组是:A[N]={5,3,4,7,3,5,6},则输出为: 3,1,2,5,1,3,4。 提示:可再定义一个数组B,B[i]记录数组A中下标为i的元素的编号,初始时,数组B中值均为0。第一次对A中的所有元素找最小值,对其编号1,记录在数组B中;第二次对A中未编号的所有元素找最小值,对其编号2,记录在数组B中;……。如此反复,直到对A的所有元素都进行了编号,再输出B的元素值即可。 【输入形式】 两行:第一行为数组A中的整数个数N;第二行是N个整数,整数之间用一个空格隔开。 【输出形式】 N个用空格隔开的整数,每个整数对应表示数组A中的N个整数的编号,编号之间用一个空格隔开。
时间: 2023-05-21 07:05:19 浏览: 187
我可以给出以下代码来解决这个问题:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, a[100], b[100] = { 0 }, id = 0;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
for (int i = 0; i < n; i++) {
if (b[i])
continue;
id++;
for (int j = i; j < n; j++) {
if (a[j] == a[i])
b[j] = id;
}
}
for (int i = 0; i < n; i++)
cout << b[i] << " ";
return 0;
}
这个程序定义了两个数组:a存放输入的整数,b初始化为0,用来存放每个整数的编号。使用id变量来记录当前编号。
程序的核心在于两个循环。第一个循环负责遍历整个a数组,因为相同的整数要具有相同的编号,所以如果当前数组元素对应编号已经处理过,就跳过。
第二个循环主要负责找到和a[i]相等的数字,并给它们编号。
最后,将数组b中保存的结果输出即可。
相关问题
帮我用c语言写一个:对数组A中的N(1<N<=100)个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组A中元素的顺序,且相同的整数要具有相同的编号。例如数组是:A[N]={5,3,4,7,3,5,6},则输出为: 3,1,2,5,1,3,4。
以下是对数组A中的N个整数从小到大进行连续编号的C语言代码:
```c
#include <stdio.h>
int main() {
int n, a[100], b[100], i, j, count;
printf("请输入数组长度n:");
scanf("%d", &n);
printf("请输入数组元素:");
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
b[i] = -1; // 初始化编号为-1
}
count = 0;
for (i = 0; i < n; i++) {
if (b[i] == -1) { // 如果该元素还未编号
count++; // 编号加1
for (j = i; j < n; j++) {
if (a[j] == a[i]) { // 如果找到相同的元素
b[j] = count; // 给该元素赋相同的编号
}
}
}
}
printf("各个元素的编号为:");
for (i = 0; i < n; i++) {
printf("%d ", b[i]);
}
return 0;
}
```
输入示例:
```
请输入数组长度n:7
请输入数组元素:5 3 4 7 3 5 6
```
输出示例:
```
各个元素的编号为:3 1 2 5 1 3 4
```
对数组a[10]中的十个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组 a 中元素的顺序,并且相同的整数要具有相同的编号。
代码实现如下:
a = [1, 5, 3, 9, 7, 4, 8, 2, 6, 0] # 数组a
for i in range(len(a)): # 外层循环控制整体比较轮数
for j in range(len(a) - i - 1): # 内层循环控制每轮比较次数,每轮少比较一次
if a[j] > a[j + 1]: # 如果前面的数比后面大
a[j], a[j + 1] = a[j + 1], a[j] # 将两数交换
for i in range(len(a)): # 输出每个元素的排序序号
print(a.index(i))
阅读全文