如果是任意大小的數字,那麽有些麻煩,可以設定兩個默認值代表最多的數字和最多的次數。接著去輪詢,並計數,如果次數大於默認值,替換即可。遍歷完成即可輸出那兩個值。
如果是0~9,或者字母的話,比較簡單。可以定義定長的數組,數組下標代表具體值,數組的內容代表值出現的次數,遍歷壹遍原數組,得到次數。遍歷定長數組,得到值。
第壹種方法代碼如下,第二種自己琢磨吧。
#include?<stdio.h>#include?<stdlib.h>
int?main(int?argc,?char?const?*argv[])
{
int?num?=?0;//用來存最多值的數值,默認為0
int?coumt?=?0;?//用來存最多值的個數,默認為0
int?temp?=?0;//中間變量
int?n?=?0;?//數組的個數
int?*p?=?NULL;?//開辟空間的首地址,等價於&a[0]
printf("Pls?enter?the?number?of?arrays:");
while(1)
{
scanf("%d",?&n);
if(n?<=?0)
printf("Error?is?scanf,pls?try?again\n");
else
break;?
}
p?=?(int?*)malloc(sizeof(int)?*?n);
if(p?==?NULL)
{
printf("Error?is?malloc\n");
return?-1;
}
for?(int?i?=?0;?i?<?n;?++i)
{
printf("Pls?enter?the?num?for?buf[%d]=",?i+1);
scanf("%d",?&p[i]);
}
for?(int?i?=?0;?i?<?n;?++i)?//簡單的遍歷查找
{
temp?=?0;
for?(int?j?=?i;?j?<?n;?++j)
{
if?(p[i]?==?p[j])
{
temp++;//計數
}
}
if(coumt?<?temp)//如果次數大於默認值,替換
{
coumt?=?temp;
num?=?p[i];
}
}
printf("The?most?common?number?is?%d?and?the?coumt?is?%d\n",?num,?coumt);
return?0;
}#include?<stdio.h>
#include?<stdlib.h>
int?main(int?argc,?char?const?*argv[])
{
int?coumt?=?0;?//用來存最多值的個數,默認為0
int?temp?=?0;//中間變量,用於計數
int?n?=?0;?//數組的個數
int?*p?=?NULL;?//開辟空間的首地址,等價於&a[0]
int?*num?=?NULL;?//開辟空間的首地址,等價於&a[0]
int?flag?=?0;//定義壹個標誌位,用於計數重復的次數的數值出現
printf("Pls?enter?the?number?of?arrays:");
while(1)
{
scanf("%d",?&n);
if?(n?<=?0)
printf("Error?is?scanf,pls?try?again\n");
else
break;?
}
p?=?(int?*)malloc(sizeof(int)?*?n);//存放妳要的數組
if?(p?==?NULL)
{
printf("Error?is?malloc?for?p\n");
return?-1;
}
num?=?(int?*)malloc(sizeof(int)?*?n);//存放最多數值的數組,最壞情況,沒有重復數字
if?(num?==?NULL)
{
printf("Error?is?malloc?for?num\n");
return?-1;
}
for?(int?i?=?0;?i?<?n;?++i)
{
printf("Pls?enter?the?num?for?buf[%d]=",?i+1);
scanf("%d",?&p[i]);
}
for?(int?i?=?0;?i?<?n;?++i)?//簡單的遍歷查找,找出最大的次數
{
temp?=?0;
for?(int?j?=?i;?j?<?n;?++j)
{
if?(p[i]?==?p[j])
{
temp++;//計數
}
}
if?(coumt?<?temp)//如果次數大於默認值,替換
coumt?=?temp;
}
for?(int?i?=?0;?i?<?n;?++i)?//簡單的遍歷查找,找出重復的次數
{
temp?=?0;
for?(int?j?=?i;?j?<?n;?++j)
{
if?(p[i]?==?p[j])
{
temp++;//計數
}
}
if?(coumt?==?temp)//如果次數等於最大值,存儲
{
num[flag]?=?p[i];
flag++;
}
}
for?(int?i?=?0;?i?<?flag;?++i)
printf("The?most?common?number?is?%d?and?the?coumt?is?%d\n",?num[i],?coumt);
free(p);
free(num);
return?0;
}