求助 一维数组求重复元素以及个数

rtfbvg 2015-04-10 03:15:05
输入6个从小到大排列的数字,首要条件:要求输出其中重复元素最多的项以及个数,如果有多组重复元素个数一样时,输出最大的元素以及个数

Eg: 输入:3 3 5 5 7 9 得到:value=5, 相同个数为2;//元素3、 5均重复两次,所以取5
输入:5 5 5 5 7 7 得到:value=5, 相同个数为4;//虽然7大于5,但是5重复了4次,所以取5

我首先写的代码如下,求大神帮我修改一下,感激不尽!!!

#include <stdio.h>

#define SIZE 6

int main (void) {
int number[SIZE],i,k,value;
int score;
value=0;
k =1;
i = 0;
while (i < SIZE) {
scanf("%d", &number[i]);
i++;
}


i=0;
while(i<SIZE-1) {
if (number[i]==number[i+1]) {
value = number[i];
k++;
}
i++;
}
printf("value=%d, 相同个数为%d\n", value, k);

在这种情况下,当只有一组元素重复时时满足条件的,但当我输入3 3 5 5 7 9的时候,得到的k的结果为3了,c语言在3的时候判断了一次,在5的时候判断了一次,所以得到的结果不符合条件。


然后我进行了修改,改成了下面的模式:(开头部分因为和上面相同,所以我省略了,只写了判断的部分)

k=0;
i=0;
while(i<SIZE-1) {
if (number[i]==number[i+1]) {
value = number[i];
}
i++;
}

for(i=0;i<SIZE;i++) {
if(number[i]==value) {
k++;
}
}

printf("value=%d, 相同个数为%d\n", value, k);



修改后对于3 3 5 5 7 9 这串数组满足条件了,但是对于5 5 5 5 7 7, 输出的结果为value=7, 相同个数为2;这里满足了输出最大的元素这个条件而不是重复次数最多的条件,这里我不知道该怎么改了,求求大神帮忙修改下,谢谢啦!
...全文
467 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
苏叔叔 2015-04-10
  • 打赏
  • 举报
回复
要求

输入6个从小到大排列的数字
mewiteor 2015-04-10
  • 打赏
  • 举报
回复
引用 6 楼 zhangxiangDavaid 的回复:
一楼有bug,
你的输入不符合题目要求
mewiteor 2015-04-10
  • 打赏
  • 举报
回复

#include<stdio.h>
int main()
{
	int max_value,cur_value,old_value,max_count=0,cur_count,i;	
	const int SIZE=6;
	for(i=0;i<SIZE;++i)
	{
		scanf("%d",&cur_value);
		if(!i)
		{
			old_value=cur_value;
			cur_count=1;
		}
		else if(old_value==cur_value)
			++cur_count;
		else
		{
			if(cur_count>=max_count)
			{
				max_value=old_value;
				max_count=cur_count;
			}
			old_value=cur_value;
			cur_count=1;
		}
	}
	if(cur_count>=max_count)
	{
		max_value=old_value;
		max_count=cur_count;
	}
	printf("value=%d,count=%d\n",max_value,max_count);
	return 0;
}
苏叔叔 2015-04-10
  • 打赏
  • 举报
回复

一楼有bug,
自信男孩 2015-04-10
  • 打赏
  • 举报
回复
引用 4 楼 cfjtaishan 的回复:
定义一个数字数组digit[10] = { 0};然后用用一个循环for (i = 0; i <MAX; i++) digit[i]++;最后求一个最大值;
是求digit[i]的最大值[
自信男孩 2015-04-10
  • 打赏
  • 举报
回复
定义一个数字数组digit[10] = { 0};然后用用一个循环for (i = 0; i <MAX; i++) digit[i]++;最后求一个最大值;
灌水号 2015-04-10
  • 打赏
  • 举报
回复
给出的都是N*N的算法,可以考虑二叉堆。
highnewrain 2015-04-10
  • 打赏
  • 举报
回复
#include <memory.h>
#include <stdio.h>
#define SIZE 6

struct MyNode
{
int value;//值
int count;//出现次数
int valid; //是否有效,1有效,0无效
};

int main (void) {
MyNode nodes[SIZE];
memset(nodes,0,sizeof(nodes));
int i=0,j=0,temp=0;
for(i=0;i<SIZE;++i)
{
scanf("%d",&temp);
for(j=0;j<SIZE;++j)
{
if(nodes[j].value==temp&&nodes[j].valid==1)
{
nodes[j].count++;
}
else if (nodes[j].valid==0)
{
nodes[j].value=temp;
nodes[j].valid=1;
nodes[j].count=1;
break;
}
}
}
MyNode nd=nodes[0];
for(i=0;i<SIZE;++i)
{
if(nodes[i].valid==1)
{
if(nd.count<nodes[i].count)
{
nd=nodes[i];
}
else if(nd.count==nodes[i].count&&nd.value<nodes[i].value)
{
nd=nodes[i];
}
}
}
printf("value=%d,相同个数为%d\n",nd.value,nd.count);
}


赵4老师 2015-04-10
  • 打赏
  • 举报
回复
Do not let me think!
#include <stdio.h>
#define SIZE 6
int main () {
    int number[SIZE],i,last,j,t,k;
    int times[SIZE],n[SIZE];

    for (i=0;i<SIZE;i++) {
        n[i]=i;
        scanf("%d", &number[i]);
        if (i==0) {
            last=number[i];
            times[i]=1;
            k=0;
        } else {
            if (last==number[i]) {
                t=times[i-1];
                for (j=i;j>=k;j--) times[j]=t+1;
            } else {
                last=number[i];
                times[i]=1;
                k=i;
            }
        }
    }

    for (i=0;i<SIZE-1;i++) {
        for (j=i+1;j<SIZE;j++) {
            if (times[i]<times[j]) {
                t=times[i];times[i]=times[j];times[j]=t;
                t=n[i];n[i]=n[j];n[j]=t;
            }
        }
    }

    if (times[0]>times[1]) {
        printf("value=%d, 相同个数为%d\n",number[n[0]],times[0]);
    } else {
        t=times[0];
        for (i=1;i<SIZE;i++) {
            if (t!=times[i]) break;
        }
        t=number[n[0]];
        k=0;
        for (j=0;j<i;j++) {
            if (number[n[j]]>t) {
                t=number[n[j]];
                k=j;
            }
        }
        printf("value=%d, 相同个数为%d\n",t,times[n[k]]);
    }

    return 0;
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧