本篇文章给大家谈谈c语言如何求众数,以及c++求众数对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、C语言 如何编个程序求一组数的中位数和众数2、C语言编程,求众数3、C语言求众数问题4、用C语言找众数5、如何用c语言求众数
C语言 如何编个程序求一组数的中位数和众数
数组排序可以不用指针。你把数组定义成全局变量,比如说a[10001];然后调用我给你的快排程序就行了,这个程序可以背下来,很有用的。
void
qs(int
L,int
R)
{
int
i=L,j=R,mid=a[(L+R)/2],t;
while(ij)
{
while(a[i]mid)
++i;
while(a[j]mid)
–j;
if(i=j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
++i;
–j;
}
}
if(iR)
qs(i,R);
if(Lj)
qs(L,j);
}
排好序之后找中位数就好办了。
至于众数,我觉得最好的方法是用bfs。但这个对你来说难度有点大,我就给你写一个hash表吧。还用上面的那个数组,且假定数组a中的最大值不超过10000,若超过,你把下面这个hash数组的范围扩大就行了。
另外,设a中有n个元素,a从1开始计数(若从0开始,你改一下就好了)
int
hash[10001]={0};
int
i,Max=0;
for(i=1;
i=n;
++i)
{
++hash[a[i]];
if(hash[a[i]]hash[Max])
Max=a[i];
}
最后输出Max就好了
刚t415422663倒是提醒我了,如果要判断众数有多个,我可以把上面的程序稍改一下
int
hash[10001]={0};
int
i,Max=-1;/*注意,这里把Max赋值为-1是为了防止数组a的元素个数为0时所有数据都被输出*/
for(i=1;
i=n;
++i)
{
++hash[a[i]];
if(hash[a[i]]Max])
Max=hash[a[i]];
}
//10000是数组a中可能出现的最大值,这个你可以自己改的
for(i=1;
i=10000;
++i)
if(hash[i]==Max)
printf(“%d\n”,i);
C语言编程,求众数
int
a[n],A[n];
不能这样定义的吧。。。
A[a[i]]++;
这句有问题!
若输入的a[i]大于n,则超出了A的下标范围
访问数组超范围的下标,就会Runtime
Error。。。
C语言求众数问题
众数定义:
众数(Mode)统计学名词,将数据按从大到小顺序排列后,在统计分布上具有明显集中趋势点的数值,代表数据的一般水平(众数可以不存在或多于一个)。
修正定义:是一组数据中出现频数最多的那个数值,用M。表示。
理性理解:简单的说,就是一组数据中占比例最多的那个数。
用众数代表一组数据,可靠性较差,不过,众数不受极端数据的影响,并且求法简便。在一组数据中,如果个别数据有很大的变动,选择中位数表示这组数据的“集中趋势”就比较适合。
当数值或被观察者没有明显次序(常发生于非数值性资料)时特别有用,由于可能无法良好定义算术平均数和中位数。例子:的众数是橙。
方法:
首先定义一个结构体:
struct judgedata
{ ???? newdata;
int number;
};
struct judgedata judge[n];
其中,newdata是和 DATA 类型一致的数组.
1.判断DATA[i]是否第一次出现(用for循环在数组judge[n]中寻找).
2.是就把他放入judge[j].newdata中(假设现在judge数组中有j-1个数),同时judge[j].number置1;
3.否的话,只需找到对应的data后,judge[?].number++就可以了。
4.找到judge[n].number的最大值,对应的judge[n].newdata就是要求的那个众数。
用C语言找众数
1、先将数组a[N]排序(增序、降序都可以)
2、从a[i++]开始统计,若相等则计数器b[j++],如此重复。
3、在b[N]查找最大数max,并记录max在b[N]中的索引imax
4、设置标志flag = 1,若满足(b[i] == max i != imax),则flag = 0
5、若falg = 0,返回-1,否则返回b[imax]
#include stdio.h
#include stdlib.h
#include time.h
const int N = 10;
void Sort(int a[],int n) {
int i,j,k,t;
for(i = 0; i n- 1; ++i) {
k = i;
for(j = i + 1; j n; ++j) {
if(a[k] a[j]) k = j;
}
if(i != k) {
t = a[i];
a[i] = a[k];
a[k] = t;
}
}
}
void Show(int a[], int n) {
int i;
for(i = 0; i n; ++i)
printf(“%d “,a[i]);
printf(“\n”);
}
int main(){
int i,m,flag,imax;
int a[N],b[N];
srand((unsigned)time(NULL));
for(i = 0; i N; ++i) // 生成数组元素序列
a[i] = rand()%(1 * N);
Sort(a,N);
Show(a,N);
b[0] = 1;
for(i = 1,m = 0; i N; ++i) { // 统计各种大小数的个数
if(a[i] == a[i – 1]) ++b[m];
else b[++m] = 1;
}
++m;
imax = 0;
for(i = 1; i m; ++i) { // 查找”众数”的个数
if(b[i] b[imax])
imax = i;
}
flag = 1;
for(i = 0; i m flag; ++i) // 是否存在众数?
if(b[i] == b[imax] i != imax)
flag = 0;
printf(“%d\n”,flag ? b[imax] : -1);
return 0;
}
如何用c语言求众数
#includestdio.h
int main ()
{ int n,i,j,t,max=0,a[1000][2]={0};
scanf(“%d”,n);
for(i=0; in; i++)
scanf(“%d”,a[i][0]);
// printf(“OK\n”);
for(i=0; in-1; i++)
for(j=0; jn-1-i; j++)
if(a[j][0]a[j+1][0])
{ t=a[j][0];
a[j][0]=a[j+1][0];
a[j+1][0]=t;
}
for(i=0; in;)
{ a[i][1]=1;
for(j=i+1; a[j][0]==a[i][0]; j++)
a[i][1]++;
if(a[i][1]max)max=i;
i=j;
}
for(i=0; in; i++)
if(a[i][1]==a[max][1])
printf(“%d “,a[i][0]);
return 0;
}
关于c语言如何求众数和c++求众数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。