新聞中心
c語言求編程:眾數(shù)
數(shù)組排序可以不用指針。你把數(shù)組定義成全局變量,比如說a[10001];然后調(diào)用我給你的快排程序就行了,這個程序可以背下來,很有用的。
創(chuàng)新互聯(lián)主營鼓樓網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,重慶APP軟件開發(fā),鼓樓h5小程序定制開發(fā)搭建,鼓樓網(wǎng)站營銷推廣歡迎鼓樓等地區(qū)企業(yè)咨詢
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);
}
排好序之后找中位數(shù)就好辦了。
至于眾數(shù),我覺得最好的方法是用bfs。但這個對你來說難度有點大,我就給你寫一個hash表吧。還用上面的那個數(shù)組,且假定數(shù)組a中的最大值不超過10000,若超過,你把下面這個hash數(shù)組的范圍擴大就行了。
另外,設a中有n個元素,a從1開始計數(shù)(若從0開始,你改一下就好了)
int hash[10001]=;
int i,Max=0;
for(i=1; i=n; ++i)
{
++hash[a[i]];
if(hash[a[i]]hash[Max]) Max=a[i];
}
最后輸出Max就好了
剛t415422663倒是提醒我了,如果要判斷眾數(shù)有多個,我可以把上面的程序稍改一下
int hash[10001]=;
int i,Max=-1;/*注意,這里把Max賦值為-1是為了防止數(shù)組a的元素個數(shù)為0時所有數(shù)據(jù)都被輸出*/
for(i=1; i=n; ++i)
{
++hash[a[i]];
if(hash[a[i]]Max]) Max=hash[a[i]];
}
//10000是數(shù)組a中可能出現(xiàn)的最大值,這個你可以自己改的
for(i=1; i=10000; ++i)
if(hash[i]==Max) printf("%d\n",i);
你的串號我已經(jīng)記下,采納后我會幫你制作
如何用c語言求眾數(shù)
#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語言找眾數(shù)
1、先將數(shù)組a[N]排序(增序、降序都可以)
2、從a[i++]開始統(tǒng)計,若相等則計數(shù)器b[j++],如此重復。
3、在b[N]查找最大數(shù)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)?//?生成數(shù)組元素序列
a[i]?=?rand()%(1?*?N);?
Sort(a,N);
Show(a,N);
b[0]?=?1;
for(i?=?1,m?=?0;?i??N;?++i)?{?//?統(tǒng)計各種大小數(shù)的個數(shù)
if(a[i]?==?a[i?-?1])?++b[m];
else?b[++m]?=?1;
}
++m;
imax?=?0;
for(i?=?1;?i??m;?++i)?{?//?查找"眾數(shù)"的個數(shù)
if(b[i]??b[imax])
imax?=?i;
}
flag?=?1;
for(i?=?0;?i??m??flag;?++i)?//?是否存在眾數(shù)?
if(b[i]?==?b[imax]??i?!=?imax)
flag?=?0;
printf("%d\n",flag???b[imax]?:?-1);
return?0;
}
C語言編程,求眾數(shù)
int a[n],A[n];
不能這樣定義的吧。。。
A[a[i]]++;
這句有問題!
若輸入的a[i]大于n,則超出了A的下標范圍
訪問數(shù)組超范圍的下標,就會Runtime Error。。。
網(wǎng)頁題目:c語言用函數(shù)編程眾數(shù) c語言 眾數(shù)
新聞來源:http://fisionsoft.com.cn/article/ddgppgs.html