當前位置:首頁 » 編程語言 » 找眾數貪心演算法c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

找眾數貪心演算法c語言

發布時間: 2022-12-19 10:49:11

1. c語言求眾數問題

演算法很多。大致思路如下:
定義數據范圍:如0-100,
定義數組1:int a[101]//標保證任何數據都可以容納,並且初始化為0。
定義數組2:int data[n] //待處理數組,自己初始化。
代碼如下:
#include<stdio.h>
void main()
{
int a[101]={0};
int nMax = 0;
int data[50] = {1,3,4,2,13,4,2,1.....};//這個你自己初始化
for(int i=0;i<50;i++)
a[data[i]]++;
for(int n=0;n<101;n++)
{ if(nMax<a[n])

nMax = a[n];
}
for(int k=0;k<101;k++)
{
if(nMax == a[k])
printf("%4d,%4d\n",nMax,k);
}
}

2. 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;


}

3. 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]=;
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]=;
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);
你的串號我已經記下,採納後我會幫你製作

4. 收集各類貪心演算法(C語言編程)經典題目

舉個例子,假如你買東西,老闆需要找給你99分錢,他有上面面值分別為25分,10分,5分,1分的硬幣(都是假如,不符合實際),他得找你3個25分,2個10分的,4個1分的才為最佳方案!
用貪心演算法編寫程序實現!
main()
{
int
i,a[5],b[4],c[4];
/*
define
the
type
of
the
money*/
a[1]=25;
a[2]=10;
a[3]=5;
a[4]=1;
printf("please
input
you
money
(fen):\n");
scanf("%d",&b[0]);
for
(i=1;i<=4;i++)
{
b[i]=b[i-1]%a[i];
/*take
n
25
off
and
money
left*/
c[i]=(b[i-1]-b[i])/a[i];
/*
n
*/
printf("%d
is
%d\n",a[i],c[i]);
}
getch();
}

5. 用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;
}

6. C語言關於貪心演算法的(很簡單)

LZ在開始研究ACM嘛?
#include
int
least_num_cash(int
_money)
{
/*直接貪心,能用大張的鈔票盡量用大張的*/
int
ret=0;
while(_money!=0)
{
if(_money>=100)
{
_money-=100;
}
else
if(_money>=50)
{
_money-=50;
}
else
if(_money>=20)
{
_money-=20;
}
else
if(_money>=10)
{
_money-=10;
}
else
if(_money>=5)
{
_money-=5;
}
else
if(_money>=2)
{
_money-=2;
}
else
if(_money>=1)
{
_money-=1;
}
ret++;
}
return
ret;
}
int
main()
{
int
n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
printf("%d\n",least_num_cash(m-n));
}
return
0;
}

7. C語言如何用眾數法實現查找一組數據中的最大眾數和最小眾數

你的意思是有多個眾數的情況下,其中最大的叫最大眾數,最小的叫最小眾數是嗎?
#include<stdlib.h>
#include<stdio.h>
#include <time.h>
int main()
{
srand(time(NULL));
int all[100];
for (int i = 0; i < 100; all[i++] = rand() % 49 + 1);
int times[51] = { 0 };
for (int i = 0; i < 100; times[all[i++]]++);
int max_index = 0;
int tmp = 0;
for (int i = 1; i <= 50; i++)
{
if (times[i] >= tmp)
{
tmp = times[i];
max_index = i;
}
}
int min_index = 0;
tmp = 0;
for (int i = 50; i >= 1; i--)
{
if (times[i] >= tmp)
{
tmp = times[i];
min_index = i;
}
}
printf("最大眾數是: %d,最小眾數是: %d", max_index, min_index);
}