1、先將數(shù)組a[N]排序(增序、降序都可以)
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括甘州網(wǎng)站建設(shè)、甘州網(wǎng)站制作、甘州網(wǎng)頁(yè)制作以及甘州網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,甘州網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到甘州省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
2、從a[i++]開始統(tǒng)計(jì),若相等則計(jì)數(shù)器b[j++],如此重復(fù)。
3、在b[N]查找最大數(shù)max,并記錄max在b[N]中的索引imax
4、設(shè)置標(biāo)志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)計(jì)各種大小數(shù)的個(gè)數(shù)
if(a[i]?==?a[i?-?1])?++b[m];
else?b[++m]?=?1;
}
++m;
imax?=?0;
for(i?=?1;?i??m;?++i)?{?//?查找"眾數(shù)"的個(gè)數(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;
}
#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;
}
數(shù)組排序可以不用指針。你把數(shù)組定義成全局變量,比如說a[10001];然后調(diào)用我給你的快排程序就行了,這個(gè)程序可以背下來,很有用的。
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。但這個(gè)對(duì)你來說難度有點(diǎn)大,我就給你寫一個(gè)hash表吧。還用上面的那個(gè)數(shù)組,且假定數(shù)組a中的最大值不超過10000,若超過,你把下面這個(gè)hash數(shù)組的范圍擴(kuò)大就行了。
另外,設(shè)a中有n個(gè)元素,a從1開始計(jì)數(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ù)有多個(gè),我可以把上面的程序稍改一下
int hash[10001]=;
int i,Max=-1;/*注意,這里把Max賦值為-1是為了防止數(shù)組a的元素個(gè)數(shù)為0時(shí)所有數(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)的最大值,這個(gè)你可以自己改的
for(i=1; i=10000; ++i)
if(hash[i]==Max) printf("%d\n",i);
你的串號(hào)我已經(jīng)記下,采納后我會(huì)幫你制作
int a[n],A[n];
不能這樣定義的吧。。。
A[a[i]]++;
這句有問題!
若輸入的a[i]大于n,則超出了A的下標(biāo)范圍
訪問數(shù)組超范圍的下標(biāo),就會(huì)Runtime Error。。。
網(wǎng)頁(yè)標(biāo)題:c語(yǔ)言求眾數(shù)的調(diào)用函數(shù) 如何用c語(yǔ)言求眾數(shù)
瀏覽地址:http://jinyejixie.com/article0/dochhio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、定制網(wǎng)站、網(wǎng)站排名、企業(yè)建站、面包屑導(dǎo)航、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)