标题:请教一个关于数组中从小到大连续编号问题!
只看楼主
camelbupt
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-9-28
 问题点数:0 回复次数:10 
请教一个关于数组中从小到大连续编号问题!

对数组A中的N0<N<100)个整型元素进行从小到大连续编号,要求不能改变数组A中的元素顺序,且相同元素有相同编号。例如A=5347356)则输出:(3125134

该怎么实现啊?一点头绪都没有。
请大家支支招啊。

搜索更多相关主题的帖子: 从小到大 
2007-11-08 11:15
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

表排序.


倚天照海花无数,流水高山心自知。
2007-11-08 11:33
nianshi
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-7
得分:0 

可以用一个临时数组中,把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);
}
}

}
以上只是我个人的理解,还请大家指正……


行至水穷处 坐看去起时
C语言QQ群1:51871776  群2:26313099  群3:47145282
2007-11-08 12:04
孤魂居士
Rank: 2
来 自:老A(中国地大)
等 级:论坛游民
威 望:4
帖 子:1142
专家分:18
注 册:2007-5-21
得分:0 
用指针



准备用3年做个高级软件工程师 10年也做不成。准备用10年做成高级软件工程师 3年就成了QQ 群 45771086
欢迎版主...欢迎JAVA爱好者...
一起从深夜 到凌晨...
2007-11-08 12:09
许一民
Rank: 1
来 自:江苏连云港
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-9-29
得分:0 

#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编辑过]


丛丛芳芫满冬秋,淡淡一笑泯恩仇!
2007-11-08 12:10
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
得分:0 
随便写了一个,将就看看吧,思想就是比较所有两个数之间的大小,大于的化,编号就加一。
还有就是如果大于同一个数的时候,编号只加一次....
[CODE]
#include<stdio.h>
#include<stdlib.h>
#define N 7
int main()
{
int a[N]={5,3,4,7,3,5,6};
int b[N];
int i,j,k;
for (i=0; i<N; i++)
b[i]=1; /* 因为编号从一开始,所以全部初始化为一 */
for (i=0; i<N; i++)
for (j=i; j<N; j++)
{
k=0;
if (a[i]-a[j]>0) /* a[i]大于一个数,b[i]就加一 */
{
while (a[j] != a[k] && k<j)
k++;
if (k == j) /* 保证大于的这个数是以前没有比较过的 */
b[i]++;
}
else if (a[i]-a[j]<0) /* 如果是小于,则对方加一 */
{
while (a[i] != a[k] && k<i)
k++;
if (k == i) /* 和上面一样,保证这个比它小的数前面没有出现过 */
b[j]++;
}
}
for (i=0; i<N; i++)
printf("%3d",b[i]);
system("pause");
return 0;
}

[/CODE]

2007-11-08 12:11
shlg1229
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2007-9-24
得分:0 
用二叉树。输出该数据的路径数即可

个人意见,不代表官方看法
2007-11-08 12:56
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 

6 楼的程序不错

[此贴子已经被作者于2007-11-8 13:37:13编辑过]


—>〉Sun〈<—
2007-11-08 13:29
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
得分:0 
3最小```所以编号是1````7是第5个最大的数``所以编号是5````明白?


我也没想出什么好办法来``


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-11-08 13:31
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
得分:0 
谢谢8楼的夸奖  
2007-11-08 14:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-184458-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.325539 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved