//要求:不能改变数组A中元素的顺序,且相同的整数要具有相同的编号。
//例如数组是A=(5,3,4,7,3,5,6)则输出为(3,1,2,5,1,3,4)
//程序思想:
//1:front记录前一个编号数的值用于判断编号是否改变,若值相同则编号不变
//2: 每次循环找最小值之前先找出当前第一个未编号的数的下标min
#include<stdio.h>
#define N 7
int main()
{
int i ,j, a[2][N]={0}, index = 0 , min ,front = -65536;
printf("请输入%d个整数:",N);
for(i = 0 ; i < N ; i++)
{
scanf("%d",&a[0][i]);
//a[1][i] = 0;
}
for(i = 0;i < N ;i++)
{
//从编号为0的数中找最小值
j = 0;
while(a[1][j] != 0)
j++;
min = j;//min为第一个编号为0的数的下标
for(j = 0 ; j < N ; j++)
{
if(a[1][j] == 0 && a[0][j] < a[0][min])
{
min = j;
}
}
if(a[0][min] > front)
index++;
a[1][min] = index;
front = a[0][min];
}
for(i = 0;i < N; i++)
printf("%d ",a[1][i]);
return 0;
}
输出结果: