c语言数组元素判断是不是相同以及相同的个数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言数组元素判断是不是相同以及相同的个数相关的知识,希望对你有一定的参考价值。
一个一维数组,输入从小到大排列的6个数字,判断其中元素中最大的相同个数以及相同的项。
比如说
输入:1 3 4 5 7 7,输出:x[5],x[6],相同数=2。
输入:1 5 5 5 8 9,输出:x[2],x[3],x[4],相同数=3。
输入:4 4 6 6 6 6,输出:x[3],x[4],x[5],x[6],相同数=4。
#include <stdio.h>
#include <stdlib.h>
#define ARR_MAX 6
static int temp[ARR_MAX];
bool temp2[ARR_MAX];
void reset() // 初始化静态区变量 temp与temp2
for (int i=0;i<ARR_MAX;i++)
temp[i]=1;
temp2[i]=true;
int repeat_e(int a[ARR_MAX])
reset();
// 跳跃式算法,加快检索速度
for (int i=0;i<ARR_MAX;i++)
if(!temp2[i]) continue;
for (int j=i+1;j<ARR_MAX;j++)
if (a[i]==a[j])
temp[i]++;
temp2[j]=false;
// 寻找最值算法
int _max=1;
int target_index=-1; // 目标索引
for(int i=0;i<ARR_MAX;i++)
if(temp[i]>_max)
_max=temp[i];
target_index=i;
return target_index>-1?a[target_index]:-1;
int main(int argc, char* argv[])
int arr[ARR_MAX]=0;
scanf("%d %d %d %d %d %d",&arr[0],&arr[1],&arr[2],&arr[3],&arr[4],&arr[5]);
int target_value=repeat_e(arr);
if(target_value>-1)
int _count=0;
for(int i=0;i<ARR_MAX;i++)
if(arr[i]==target_value)
printf("x[%d],",i+1);
_count++;
printf("\\b ,相同数=%d\\n",_count);
system("pause");
return 0;
参考技术A 不知道你想过这个问题没有:当相同的数中相同个数的最大值是相等的!
比如说有一组数据:4 4 4 6 6 6
相同数位3 可是相同的却有两组了!
楼下的代码只能解决没有相同的最大值的情况!
我必须的说考虑问题不严谨!
不过要是存在相同的数最大值有多组的情况就会复杂了!
相同的数的最大的个数可能有1个:也就是全都不相同的数如:1 2 3 4 5 6
相同的数的最大个数可能有2个:也就是 2 2 3 3 4 4
相同的数的最大个数可能有3个,也就是:2 2 2 3 3 3 4 4 4
...............这个问题看似简单却是在考验你逻辑思维的严谨性! 参考技术B #include<stdio.h>
int search(int *apt,int n,int key)
int *p;
for(p=apt;p<apt+n;p++) //寻找特定元素
if(*p==key)
return p-apt;
return -1;
int b[]=90,80,70,60,50,40,772,294,1065,184;
int a[]=90,80,70,60,50,40,30,20,10,9,8,7,6,5,42,40,50,1,2,3; //在这里定义的好处是,可以在任意函数中通用
main() //main拼错了
int i;
int c[sizeof(b)/sizeof(b[0])];
int q=0;
int d;
printf("The elements of array a is:\n"); //输出a数组中的元素
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
printf(" %d",a[i]);
printf("\n");
printf("The elements of array b is:"); //输出b数组中的元素
for(i=0;i<sizeof(b)/sizeof(b[0]);i++)
printf(" %d",b[i]);
printf("\n");
for(i=0;i<sizeof(b)/sizeof(b[0]);i++) //对b中数组的每一个数字都和a中的数字对比一次
int key;
key=b[i]; //关键字是b数组中第i个数字
d=search(a,sizeof(a)/sizeof(a[0]),key); //寻找关键字
if(d>-1)
c[q]=key; //这里要保存数组元素的值key,而不是数组下标d
q=q+1; //这句话应该放在后面,因为数组下标从0开始
printf("The number is:\n",q);
for(i=0;i<q;i++) //这里i的取值应该为i<q
printf(" %d",c[i]);
return 0;追问
我目前还没有学到指针,所以上面的代码有很多都看不懂,能麻烦你不用指针完成吗?谢谢了!
C语言 删除所有相同值的元素
从键盘输入整型一维数组中 a 中的各元素(以元素 0 结束, 0 是最后一个有效果元素,元素个数不超过 20 个),再输入一个待删除的整数。先输出删除前的所有数组元素。从数组中删除所有的元素值等于该整数的元素,如果元素不存在,则输出提示信息: does not exist,no operating! 否则输出删除后的所有数组元素
说明:( 1 )数组的定义: int a[20];
( 2 )应该用一个变量存储实际有效果的元素个数(含 0 )
( 3 )元素的输出用 %5d 的格式控制
( 4 ) scanf 之前不能用 printf 输出提示信息
#define N 1000
#define FLAG 0x80000000 /*特殊标记,用最小的负数表示*/
void main( )
int r[N], length, i, j;
scanf("%d", &length);
for(i = 0; i < length; i++)
scanf("%d", &r[i]);
for(i = 0; i < length - 1; i++)
if(r[i] != FLAG)
for(j = i + 1; j < length; j++)
if(r[j] == r[i]) r[j] = FLAG; /*遇到重复值,则先用特殊标记覆盖它*/
for(i = 0; r[i] != FLAG; i++); /*找到第一个特殊标记*/
for(j = i + 1; j < length;) /*删除数列中的特殊标记*/
if(r[j] != FLAG) r[i++] = r[j++];
else j++;
length = i; /*修改删除重复值后的数列的长度*/
for(i = 0; i < length; i++)
printf("%-4d", r[i]);
参考技术A #include <stdio.h>
void main()
int a[20] = 0;
int res[20] = 0;
int i, j, flag, total, delnum;
i = j = flag = total = delnum = 0;
scanf("%d", &a[total]);
while(a[total] != 0)
total++;
scanf("%d", &a[total]);
total++;
scanf("%d", &delnum);
printf("Before delete,elements are:\n");
for(i = 0; i < total; i++)
printf("%5d",a[i]);
printf("\n");
flag = 0;
i = j = 0;
while(a[i] != 0)
if(a[i] != delnum)
res[j] = a[i];
j++;
else
flag = 1;
i++;
res[j] = a[i];
j++;
total = j - 1; // 实际有效果数的个数,减去1表示不包含0
if(flag == 0)
printf("does not exist, no operating!\n");
else
printf("After delete,elements are:\n");
for(i = 0; i < j; i++)
printf("%5d",res[i]);
printf("\n");
本回答被提问者采纳 参考技术B /*
2 3 3 4 3 5 3 7 0
Before delete, elements are :
2 3 3 4 3 5 3 7 0
3
After delete,elements are :
2 4 5 7 0
Press any key to continue
*/
#include <stdio.h>
int DeleteElem(
int a[], int *n,int num) int i,j,flag = 0;
for(i = 0; i < *n; ++i)
if(a[i] == num)
for(j = i; j < *n - 1; ++j)
a[j] = a[j + 1];
(*n)--;
--i;
flag = 1;
return flag;
void Show(
int a[], int n) int i;
for(i = 0; i < n; ++i)
printf("%5d",a[i]);
printf("\n");
int main()
int n,num,a[20];
for(n = 0; ; ++n)
scanf("%d",&a[n]);
if(a[n] == 0)
++n;
break;
printf("Before delete, elements are : \n");
Show(a,n);
scanf("%d",&num);
if(DeleteElem(a,&n,num))
printf("After delete,elements are : \n");
Show(a,n);
else printf("does not exist, no operating!\n");
return 0;
以上是关于c语言数组元素判断是不是相同以及相同的个数的主要内容,如果未能解决你的问题,请参考以下文章