Ⅰ 用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>
constintN=10;
voidSort(inta[],intn){
inti,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;
}
}
}
voidShow(inta[],intn){
inti;
for(i=0;i<n;++i)
printf("%d",a[i]);
printf(" ");
}
intmain(){
inti,m,flag,imax;
inta[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];
elseb[++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 ",flag?b[imax]:-1);
return0;
}
Ⅱ C語言找眾數,我想的好復雜,不知道該怎麼想問題,運行結果也不對,就在此基礎上,怎麼改呀
我首先是要說思路問題:
收集完所有數據後,只保存輸入次數的最大值是不夠的,還需要判斷出輸入次數的最小值。只有最大值==最小值的時候才能判斷出所有數字的輸入次數都一樣。
然後是代碼格式問題:
很多for語句和if語句你沒有寫大括弧,還有一些代碼3個分號寫了一行。這在正規項目中是不允許的,因為增加了寫錯的可能性,也不便於閱讀。
#include<stdio.h>
#defineMAXNUM100+10
inta[MAXNUM+1]={0};
intmain()
{
inti,m,t,MAX,n,x,MIN,cmax,cmin;//M指代不明確,改了
intc[MAXNUM]={0};
//輸入一組整數
for(i=0;i<MAXNUM;)
{
scanf("%d",&a[i++]);
if(getchar()==' ')
break;
}
m=i;
MAX=a[0];
MIN=a[0];
//判斷眾數:統計每個數出現的次數,t出現的次數為c[t]
for(i=0;i<m;i++)
{
t=a[i];
c[t]++;
}
//這段代碼目的應該是找出輸入數據的最大值,減少後面步驟循環次數吧。
for(i=1;i<m;i++)
{
if(a[i]>MAX)
{
//不需要修改a數組中的輸入數據!
MAX=a[i];
}
if(a[i]<MIN)
{
MIN=a[i];
}
}
//輸入次數取值范圍就是0-m,至於為什麼初值要反著來,你可以思考下。
cmax=0;
cmin=m;
//找出c數組中的最大和最小數值。最小數值不能低於1,因為0代表沒輸入過。
for(i=MIN;i<=MAX;i++)//是小於等於,否則MAX的數據就沒了。
{
if(c[i]>cmax)
{
//仍然不懂你為什麼要修改c數組
cmax=c[i];
}
if(c[i]<cmin&&c[i]!=0)
{
cmin=c[i];
}
}
if(cmax==cmin)
{
printf("沒有眾數、 ");
}
else
{
printf("眾數為%d ",cmax);
}
return0;
}
Ⅲ C語言編程,求眾數
int
a[n],A[n];
不能這樣定義的吧。。。
A[a[i]]++;
這句有問題!
若輸入的a[i]大於n,則超出了A的下標范圍
訪問數組超范圍的下標,就會Runtime
Error。。。
Ⅳ c語言,輸入一組數,輸出眾數,怎麼寫代碼
只需要開辟足夠大的數組,然後依次讀取輸入數據,並存到數組中,最終再依次輸出即可。
比如輸入10個整型數據並原樣輸出的程序可以寫作:
#include <stdio.h>
int main()
{
int a[10]; //定義數組
int i;
for(i = 0; i <10; i ++)
scanf("%d",&a[i]); //輸入
for(i = 0; i <10; i ++)
printf("%d ", a[i]);//原樣輸出。
return 0;
}
Ⅳ 怎麼用c語言編一個演算法求一個數組中的眾數個數 謝謝幫忙!!!
int
zongshu(int
*a)
{
//判斷是不是眾數
是return
1
不是return
0
;
}
void
main()
{
int
a[100];
int
count=0,i=0;
//輸入數組a的值
for(i=0;i
評論
0
0
載入更多
Ⅵ 為什麼眾數問題C語言,遞歸500個數據
給定一個數組,找出其中出現次數最多的那個元素(即眾數)。
給定一個有相同值的二叉搜索樹(BST),找出 BST 中的所有眾數(出現頻率最高的元素)。
假定 BST 有如下定義:
結點左子樹中所含結點的值小於等於當前結點的值
結點右子樹中所含結點的值大於等於當前結點的值
左子樹和右子樹都是二叉搜索樹
Ⅶ C語言 如何編個程序求一組數的中位數和眾數
數組排序可以不用指針。你把數組定義成全局變數,比如說a[10001];然後調用我給你的快排程序就行了,這個程序可以背下來,很有用的。
void
qs(int
L,int
R)
{
int
i=L,j=R,mid=a[(L+R)/2],t;
while(i<j)
{
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(i<R)
qs(i,R);
if(L<j)
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語言問題
等我,現在就給你寫去啊
#include
<stdio.h>
void
main()
{
int
a[10],i,j,
plunum,
temp,plui
=
0,ti
=
0;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
//
10個數的輸入
for(i=0;i<10;i++)
{
temp
=
a[i];
for(j=i+1;j<10;j++)
if(temp=a[j]&&
NULL!=a[j])
{
ti++;
a[j]=
NULL;
}
if(ti
>
plui)
{
plunum
=
temp;
plui
=
ti;
}
}
printf("%d\n%d\n",plunum,plui);
}
大致就是這樣吧,我沒試過,你自己試試看,基本的已經出來的,細節點東西你自己改一下吧,相信你有這個實力,我先吃飯去了,呵呵
Ⅸ 如何用c語言求眾數
#include<stdio.h>
int main ()
{ int n,i,j,t,max=0,a[1000][2]={0};
scanf("%d",&n);
for(i=0; i<n; i++)
scanf("%d",&a[i][0]);
// printf("OK ");
for(i=0; i<n-1; i++)
for(j=0; j<n-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; i<n;)
{ 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; i<n; i++)
if(a[i][1]==a[max][1])
printf("%d ",a[i][0]);
return 0;
}
Ⅹ C語言求眾數
#include<stdio.h>
int main()
{
int i,n,c,max=0,j,number;
int a[10];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
number=1;
for(j=0;j<n;j++)
{
if(a[j]==a[i])
{
number++;
}
if(max<number)
{
max=number;
c=a[i];
}
}
}
printf("該列數中眾數為: %d ",c);
return 0;
}