对数组A中的N(0<N<100)个整型元素进行从小到大连续编号,要求不能改变数组A中的元素顺序,且相同元素有相同编号。例如A=(5,3,4,7,3,5,6)则输出:(3,1,2,5,1,3,4)
该怎么实现啊?一点头绪都没有。
请大家支支招啊。
表排序.
可以用一个临时数组中,把A的7个数按升序放入B中,去掉重复的。
然后遍历A的每个数,然后输出该数在B中的下标+1(下标从0开始);
参考程序:
main()
{
int a[7]={5,3,4,7,3,5,6},b[7]={0};
int i,j,n;
/*把A中的数去掉重复的放入B中*/
b[n++]=a[0];
for(i=1;i<7;i++)
for(j=0;j<n;j++)
{
if(a[i]==b[j])
{
break;
}
if(j==n)
{
b[n++]=a[i];
}
}
/*把B中的排序*/
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(b[i]<b[j])
{
int t; t=b[i];b[i]=b[j];b[j]=t;
}
}
/*在B中找A中每个数对应的下标*/
for(i=0;i<7;i++)
for(j=0;j<n;j++)
{
if(a[i]==b[j])
{
printf("%d,",j+1);
}
}
}
以上只是我个人的理解,还请大家指正……
#include <conio.h> /*已在Turboc2 环境下测试通过*/
#define N 7
int A[N]={5,3,4,7,3,5,6},B[N],C[N];
void px()
{int t,i,j,temp;
for(i=0;i<N;i++)
B[i]=A[i]; /*用数组B暂存数组A*/
for(i=0;i<N-1;i++) /*把数组B中的数按照从小到大的顺序排序*/
{ t=i;
for(j=i+1;j<N;j++)
if(B[t]>B[j]) t=j;
if(t!=i)
{temp=B[i];B[i]=B[t];B[t]=temp;}
}
}
void bh()
{int i,j,k;
for(i=0;i<N;i++)
C[i]=1; /*C数组用来存序号,初始数值全为1*/
for(i=0;i<N;i++)
for(j=0;j<N;j++) /*把A数组和B数组遍历比较,在B[j]中找到一个比A[i]大的数,则序号C[i]加1
注意:若B[j]数组中存在相等数值,则用最后一个和数组A[i]比较,避免重复计数*/
{if((B[j]<A[i])&&B[j]!=B[j+1])
C[i]=C[i]+1;
}
}
main()
{int i;
px();
bh();
clrscr();
for(i=0;i<N;i++)
printf("A[%d]=%d,C[%d]=%d\n",i,A[i],i,C[i]);
getch();
}
[此贴子已经被作者于2007-11-8 12:22:36编辑过]