眾數問題c語言
(1)"int
a[n],A[n]"定義有問題,定義一個數組,應該用常量制定數組的長度,而不是變數
(2)"A[a[i]]++";如果a[i]是一個很大很大的數,就會超出數組的范圍,出現錯誤
『貳』 C語言求眾數的問題
眾數定義:
眾數(Mode)統計學名詞,將數據按從大到小順序排列後,在統計分布上具有明顯集中趨勢點的數值,代表數據的一般水平(眾數可以不存在或多於一個)。
修正定義:是一組數據中出現頻數最多的那個數值,用M。表示。
理性理解:簡單的說,就是一組數據中佔比例最多的那個數。
用眾數代表一組數據,可靠性較差,不過,眾數不受極端數據的影響,並且求法簡便。在一組數據中,如果個別數據有很大的變動,選擇中位數表示這組數據的「集中趨勢」就比較適合。
當數值或被觀察者沒有明顯次序(常發生於非數值性資料)時特別有用,由於可能無法良好定義算術平均數和中位數。例子:的眾數是橙。
方法:
首先定義一個結構體:
struct judgedata
{ ???? newdata;
int number;
};
struct judgedata judge[n];
其中,newdata是和 DATA 類型一致的數組.
1.判斷DATA[i]是否第一次出現(用for循環在數組judge[n]中尋找).
2.是就把他放入judge[j].newdata中(假設現在judge數組中有j-1個數),同時judge[j].number置1;
3.否的話,只需找到對應的data後,judge[?].number++就可以了。
4.找到judge[n].number的最大值,對應的judge[n].newdata就是要求的那個眾數。
『叄』 c語言眾數問題,while後面的scanf,看不懂,是要輸入x嗎
while(scanf("%d", &x)==1)確保讀入一個整數,否則終止循環,使用引用是為了調用者傳值
『肆』 如何用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語言找眾數
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語言求眾數
#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;
}
『柒』 C語言找眾數,我想的好復雜,不知道該怎麼想問題,運行結果也不對,就在此基礎上,怎麼改呀
// 初步測試可以實現, 可能還需要更改,重要的是思想。 自己動手完善一下吧。
// 下面用兩個數組實現,如果你知道結構體的話,建議用結構體實現
#define MAXNUM 100
int PosOfThisNum(int *arr, int nLen, int nNum)
{
for(int i = 0 ; i < nLen; i++)
{
if(arr[i] == nNum)
return i;
}
return -1;
}
int main(int argc, char *argv[])
{
int arr[MAXNUM] = {0};
int i = 0;
for(;i < MAXNUM; i++)
{
scanf("%d",&arr[i]);
if(getchar() == ' ')
break;
}
int arrNum[MAXNUM] = {0};
int arrTimes[MAXNUM] = {0};
// arrNum記錄所有的數
// arrTimes記錄所有數出現的次數
int nCount = 0;
int nPos = 0;
for(int j = 0; j <= i; j++)
{
nPos = PosOfThisNum(arrNum, nCount, arr[j]);
if(-1 == nPos)
{
arrNum[nCount] = arr[j];
arrTimes[nCount]++;
nCount++;
}
else
{
arrTimes[nPos]++;
}
}
// 根據次數排序arrNum和arrTimes兩個數組
int nTemp = 0;
int nMax = arrTimes[0];
for(int m = 0; m <= nCount; m++)
{
for(int n = m; n <= nCount; n++)
{
if(nMax < arrTimes[n])
{
nTemp = arrTimes[n];
arrTimes[n] = arrTimes[m];
arrTimes[m] = nTemp;
nTemp = arrNum[n];
arrNum[n] = arrNum[m];
arrNum[m] = nTemp;
}
}
}
// 輸出次數數組前n個最大的數
printf("該數組的眾數有:");
int r = 0;
for(; r < nCount; r++)
{
printf("%d ", arrNum[r]);
if(arrTimes[r] != arrTimes[r + 1])
break;
}
if(r == nCount)
{
printf("%d", arrNum[nCount]);
}
getchar();
}