第一行输入每行数据个数。
第二行输入属性一。
第三行输入属性二。
输入
4
100 100 120 130
40 30 60 50
输出
2 1 3 4
输入
3
90 110 90
45 60 45
输出
1 3 2
属性一升序。
属性二在属性一相同的情况下内部升序。
输入之原位角标在前则输出在前原则。
输出角标变化后之原角标。
存一个原输入作为检索参照物。
先给属性一排序。
再在属性一排好的约束下给属性二排序。
按属性二去重。
按顺序检索属性二在在原输入中的位置。
输出原输入的角标即可。
程序有点问题,有些情况不符合。
#include<stdio.h>
int n,a,b;
int len[100],wgh[100],asb1[100],asb2[100],rst[100];
int i,j,k;
#include<stdio.h>
int n,a,b;
int len[100],wgh[100],asb1[100],asb2[100],rst[100];
int i,j;
int main()
{
scanf("%d\n",&n);//获取学生个数
for(i = 0; i < n; i++)//获取学生身高
{
scanf("%d ",&a);
len[i] = a;
}
for(i = 0; i < n; i++)//获取n个学生体重
{
scanf("%d ",&b);
rst[i]= b;
wgh[i] = rst[i];
}
//先排一遍身高
//
for(i = 0;i <= n ;i++)
{
for(j =1;j<n;j++)
{
if(len[j-1] > len[j])
{
asb1[j] = len[j-1];
asb2[j] = wgh[j-1];
len[j-1] = len[j];
wgh[j-1] = wgh[j];
len[j] = asb1[j];
wgh[j] = asb2[j];
}
}
}
//再排一遍体重。
for(i = 0;i < n ;i++)
{
for(j =1;j<=n;j++)
{
if((len[j-1] == len[j])&&(wgh[j-1] > wgh[j]))
{
asb2[j] = wgh[j-1];
asb1[j] = len[j-1];
wgh[j-1] = wgh[j];
len[j-1] = len[j];
wgh[j] = asb2[j];
len[j] = asb1[j];
}
}
// printf("%d %d\n",len[i],wgh[i]);
}
//去重
int m=n;
for(i=0;i<m;i++)
{
for(j = i+1;j<m;j++)
{
if(wgh[i]==wgh[j])
{
for(k=j;k<m;k++)
{
wgh[k]=wgh[k+1];
}
m--;
j--;
}
}
//printf("%d\n",wgh[i]);
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(rst[j] == wgh[i])
{
printf("%d ",j+1);
}
}
}
}