C语言中如何判断一个数组中有几个不相同的数

如题所述

#include<stdio.h>

#define N 20

void main() { int a[N],i,j,b,n;

for ( i=0;i<N;i++ ) scanf("%d",&a[i]);

for ( i=1,n=1;i<N;i++ ) {

for ( j=0,b=0;j<i;j++ ) if ( a[i]==a[j] ) {b=1;break;} //判断a[i]前面所有元素是否与a[i]相同

if ( b==0 ) n++; //第i个元素前面与a[i]不同,则b为0,可以计数,否则不计数

}

printf("%d\n",n);

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-12
设置计数器count=1,先对数组排序,排序之后,遍历数组,假设数组为a,则若
if(a[i]!=a[i+1]) count++;
假设数组为1,2,1,1,5, 排序后-》1,1,1,2,5,遍历时只有 a[i]!=a[i+1]时,计数自增--》count=3
排序可以使用冒泡排序或者选择排序算法本回答被提问者采纳
第2个回答  2019-10-11
设置一个新的数组a2,包含一个元素是原数组a1中的一个元素,count=1
遍历a1,如果a2中没有a1[i],则把a1[i]加入到a2中,count++;追问

可以详细一点吗 怎么写出a2中没有a1【i】就cnt++

追答

#include
int main(){
int a1[10],a2[10],i,j;
for(i=0;i<10;i++)
scanf("%d",&a1[i]);
a2[0] = a1[0];
int count=1,flag=0;
for(i=0;i<10;i++){
for(j=0;j<count;j++){
if(a1[i]==a2[j]){
flag =1;
break;
}
}
if(flag==0){
a2[count++] = a1[i];
}
else
flag = 0;
}
printf("%d",count);
return 0;
}

本回答被网友采纳
第3个回答  2019-10-11
用两个for 比
设置一个累加器 ,不相等就++;
第4个回答  2019-10-12
#include <stdio.h> int main() { int a[20]={1,10,9,0,11,13,5,200,300,100,10,11,12,9,123,10,11,12,9,123}; int i,cnt=0; for( i=0;i<20;i++ ) if ( a[i] > 10 ) { printf("%d ", a[i] ); cnt++; } printf("cnt=%d\n", cnt ); return 0; }