注册 登录
编程论坛 新人交流区

如何在一个数组中找出相等数

飞天龙仔 发布于 2007-10-16 14:57, 635 次点击
比如一个数组a[5],如何找出其中只有一个对子,或者一个三个相同的数,四个相同的数这样一类问题
18 回复
#2
jxawgyl2007-10-16 15:39
关注
#3
wangchun_an2007-10-16 15:42
做个循环一个一个比较呗
#4
飞天龙仔2007-10-16 15:44
关键是“一个”,而不是个“有”那么简单,也就是有一个而不能有其它个
#5
salangni2007-10-16 20:33

thingking!

#6
koman2007-10-16 22:11
声明个计数器int i=0; 
做个循环,从把a[0]的值与这个数组每个元素比较,找到一次相同值,i++; i-1就是当前数有几个了 打印里面的a[0]值的对数
然后用a[1]的值也逐个比较,找到相同,记数 i++;i-1就是a[1]的的对数
以下一样;
#7
tcxiang2007-10-16 22:28

就是做一个循环一个个比,这种思路对于小数组还可以,大了太浪费了..
请教高手有好方法没

#8
koman2007-10-16 22:34
#include <stdio.h>
#define max 5
void main()
{
int a[max],i=0,m=0,n=0;
printf("请输入%d个整数: \n",max);
for(m=0;m<max;m++)
scanf("%d",&a[m]);
for(m=0;m<5;m++)
{
i=0;
for(n=0;n<max;n++)
{

if(a[m]==a[n])
{
i++;
}

}
printf("数组有%d个%d\n",i,a[m]);
}

}
#9
菜菜猪2007-10-16 22:34

能不能利用递归?

#10
liwanlei1002007-10-16 22:43
方法
#11
wl1984682007-10-16 22:55
哎   很简单啊  比较
#12
w158249306722007-10-16 23:33
#include<stdio.h>
void main()
{
int a[5],i,j,flag,b[5];
printf("Enter 5 number:");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++)
b[i]=a[i];
for(i=0;i<5;i++)
{
flag=1;
for(j=i+1;j<5;j++)
if((b[i]==b[j])&&b[i]!=32767)
{
flag++;
b[j]=32767;
}
if(flag!=1)
printf("There is %d %d!\n",flag,b[i]);
}
}

我用的是一个比较笨(有一定的出错概率)的方法~
#13
virusswb2007-10-17 08:52
排序怎么样,然后比较相邻的就好
#14
nghf2007-10-17 09:08

楼上好想法...

#15
xhxlmm2007-10-17 09:33

用循环吧....

#16
jasonldz2007-10-17 20:29
能不能利用递归?
#17
ACMer2007-10-17 20:40
如果重复个数超过总数的一半那就有简单方法,否则就HASH吧,或者sort也行
#18
阿布3222007-10-17 21:01
1