标题:[讨论]求一个数组的模式
只看楼主
风之梦
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-8-31
 问题点数:0 回复次数:7 
[讨论]求一个数组的模式

//该程序的目的是为了求一个数组的模式,模式定义为一个数组中出现次数最多的那个数,如果出现最大次数的数不止一个,则该数组也没有模式如1,2,2,2,4 则2是其模式,而1,1,2,2,4 则没有模式
该程序假设数组已经被排好序了
#include<iostream.h>
int mode(int a[],int n ) //求模式函数
{
int i=j=0; //i,j为数组的下标,初始都在第一个元素
x=0,r=0,count;
bool bin =false;
while(j<=n-1) //从左向右遍历数组一次
{
count=0; // 每新一次循环都把count重新置0
while(a[j]==a[i]) //从数组的开头开始,如果相等,则
{
count++; //记载这个元素重复出现的次数
j++; //i不变,j向前移动
}
if(count>x) //如果新的count的值大于原来记载在X上的最大值,则。。
{
x=count; //将新的最大值给X
rorw=true;
r=i; //r记下出现次数最多的那个元素的下标,最后被返回
}
if(count==x) //如果新出现的count和原来的最大值相等,则说明最大次数的数不止一个,则没有模式
bin=false;
i=j; //把i调到j处,继续循环
}
if(bin) return r;
else
return 0;
}
int main()
{
int x[10]={1,2,2,3,3,2,1,5,6,4};
int a;
a=mode(x,10);
if(a!=0)
cout<<x[a]<<endl;
else
cout<<"没有模式"<<endl;
return 0;
}

该程序能通过编译,但结果不对,不知道错在哪里,希望高手指点!总是输出没有模式,不管原数组是什么
愿共同进步!

搜索更多相关主题的帖子: 模式 int count 定义 bool 
2007-10-09 20:19
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
得分:0 
int i=j=0 // 中文分号
x=0,r=0,count; // 变量类型呢??
rorw=true; // 这是什么

这样也能通过编译?

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2007-10-09 21:05
valentineyzq
Rank: 1
等 级:新手上路
威 望:1
帖 子:69
专家分:0
注 册:2007-8-21
得分:0 

是啊。这是什么神奇的编译器啊?
我把你的程序进行了大改,好像没问题了:
#include<iostream>
using namespace std;
int mode(int a[],int n )
{
int i=0,j=0;
int x=0,y=0,r=0,count=0;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(a[i]==a[j]) count++;
}
if(count>x)
{
x=count;
r=a[i];
}
else if(count==x)
{
y=count;
}
count=0;
}
if(x>y) return r;
return 0;
}
int main()
{
int x[10]={1,2,2,3,3,2,1,5,6,4};
int a;
a=mode(x,10);
if(a!=0)
cout<<a<<endl;
else
cout<<"没有模式"<<endl;
return 0;
}
你的算法硬伤蛮多的,自己琢磨吧。我的说不定也有。


我的世界曾经下过一场倾盆大雨。
2007-10-09 21:33
reedleaf
Rank: 2
等 级:新手上路
威 望:3
帖 子:62
专家分:0
注 册:2007-8-5
得分:0 
你代码不咋好懂
我修改了一下,能得出正确结果了,



#include<iostream.h>
int mode(int a[],int n ) //求模式函数
{
int i=0,j=0; //i,j为数组的下标,初始都在第一个元素
int x=0,r=0,count;
bool bin =false;
while(j<=n-1) //从左向右遍历数组一次
{
count=0; // 每新一次循环都把count重新置0
while(a[j]==a[i]) //从数组的开头开始,如果相等,则
{
count++; //记载这个元素重复出现的次数
i++; //i不变,j向前移动
}
if(count==x) //如果新出现的count和原来的最大值相等,则说明最大次数的数不止一个,则没有模式
bin=false;
if(count>x) //如果新的count的值大于原来记载在X上的最大值,则。。
{
x=count; //将新的最大值给X
bin=true;
r=i; //r记下出现次数最多的那个元素的下标,最后被返回
}

j=i; //把i调到j处,继续循环
}
if(bin) return r-1;
else
return 0;
}
int main()
{
int x[10]={1,2,2,2,3,3,3,4,4,4};
int a;
a=mode(x,10);
cout<<a<<endl;
if(a!=0)
cout<<x[a]<<endl;
else
cout<<"没有模式"<<endl;
return 0;
}

2007-10-09 21:51
reedleaf
Rank: 2
等 级:新手上路
威 望:3
帖 子:62
专家分:0
注 册:2007-8-5
得分:0 

没注意
已经有解答了

2007-10-09 21:55
TenY
Rank: 1
来 自:重庆大学
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-3-18
得分:0 
[CODE]

#include<iostream.h>
int mode(int a[],int n ) //求模式函数
{
int j=0 ;
int i=0 ; //i,j为数组的下标,初始都在第一个元素
int x=0,r=0,count;
bool bin =false;
while(j<=n-1) //从左向右遍历数组一次
{
count=0; // 每新一次循环都把count重新置0
while(a[j]==a[i]) //从数组的开头开始,如果相等,则
{
count++; //记载这个元素重复出现的次数
j++; //i不变,j向前移动
}
if(count>x) //如果新的count的值大于原来记载在X上的最大值,则。。
{
x=count; //将新的最大值给X
bin=true;
r=i; //r记下出现次数最多的那个元素的下标,最后被返回
}
else if(count == x) //如果新出现的count和原来的最大值相等,则说明最大次数的数不止一个,则没有模式
bin=false;
i=j; //把i调到j处,继续循环
}
if(bin)
return r;
else
return 0;
}
int main()
{
int x[10]={1,2,2,3,3,3,3,4,4,4};
int a;
a=mode(x,10);
if(a!=0)
cout<<x[a]<<endl;
else
cout<<"没有模式"<<endl;
return 0;
}

[/CODE]

错挺多,楼主继续加油哦.
还有既然楼主自己都假定给的数组已经排好序,所以给定的数组也一定是已排好的数组.
2007-10-10 11:08
jack_sqh
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-10-9
得分:0 

//该程序假设数组已经被排好序了
#include<iostream>
using namespace std;
int mode(int a[],int n )
{
int i=0,j=0;
int x=0,count=0,r=0;
for(i=0;i<n-1;){ //i=n-1没必要
for(j=i;j<n;j++){
if(a[i]==a[j])
count++;
else if(a[j] != a[i]) //终止冗余循环
break; }
if(count>x){
x=count;
r=i+1; } //记录下标加一,区别下面的r=0;
else if(count==x)
r=0; //减少条件判断
i = i+count; //跳过冗余循环
count=0;
}
return r;

}
int main()
{
int x[10]={1,1,2,2,2,3,3,4,5,6};
int a;
a=mode(x,10);
if(a != 0)
cout<<x[a+1]<<endl;
else
cout<<"没有模式"<<endl;
return 0;
}

2007-10-10 15:10
风之梦
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-8-31
得分:0 

谢谢大家,我又学到了很多东西,非常感谢!

2007-10-11 12:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-176229-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.563195 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved