| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 315 人关注过本帖
标题:请教一个关于数组中从小到大连续编号问题!
收藏  订阅  推荐  打印 
camelbupt
Rank: 2
等级:注册会员
帖子:44
积分:550
注册:2007-9-28
请教一个关于数组中从小到大连续编号问题!

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

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

搜索更多相关主题的帖子: 从小到大  
2007-11-8 11:15
nuciewth
Rank: 12Rank: 12Rank: 12
来自:我爱龙龙
等级:版主
威望:99
帖子:9588
积分:95694
注册:2006-5-23

表排序.


倚天照海花无数,流水高山心自知。
2007-11-8 11:33
nianshi
Rank: 3Rank: 3
等级:中级会员
帖子:193
积分:2113
注册:2007-11-7

可以用一个临时数组中,把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-8 12:04
孤魂居士
Rank: 4
来自:老A(中国地大)
等级:高级会员
威望:2
帖子:869
积分:8840
注册:2007-5-21

用指针



想用3年成为编程高手10年都成不了,准备用10年成为编程高手的3年就成为了编程高手
2007-11-8 12:09
许一民
Rank: 2
来自:江苏连云港
等级:注册会员
帖子:60
积分:746
注册:2007-9-29

#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-8 12:10
chmlqw
Rank: 2
等级:注册会员
帖子:180
积分:1992
注册:2007-10-11

随便写了一个,将就看看吧,思想就是比较所有两个数之间的大小,大于的化,编号就加一。
还有就是如果大于同一个数的时候,编号只加一次....
[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-8 12:11
shlg1229
Rank: 2
等级:注册会员
帖子:107
积分:1202
注册:2007-9-24

用二叉树。输出该数据的路径数即可

个人意见,不代表官方看法
2007-11-8 12:56
cosdos
Rank: 6Rank: 6
来自:ShangHai
等级:金牌会员
威望:1
帖子:1382
积分:14406
注册:2007-6-19

6 楼的程序不错

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


—>〉Sun〈<—
2007-11-8 13:29
死了都要C
Rank: 12Rank: 12Rank: 12
来自:四川成都
等级:贵宾
威望:13
帖子:1507
积分:15568
注册:2006-12-7

3最小```所以编号是1````7是第5个最大的数``所以编号是5````明白?


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


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
http://yzfy.org
2007-11-8 13:31
chmlqw
Rank: 2
等级:注册会员
帖子:180
积分:1992
注册:2007-10-11

谢谢8楼的夸奖  
2007-11-8 14:44
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.078071 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved