parent
ad0edd63c5
commit
81da6c2478
@ -0,0 +1,53 @@
|
||||
#include <stdio.h>
|
||||
void Middle();
|
||||
void getMode();
|
||||
int main()
|
||||
{
|
||||
int Mode = 0, Mult = 0, *p, *q;
|
||||
p = &Mode, q = &Mult;
|
||||
int i, n;
|
||||
printf("请输入整数序列中整数的个数:");
|
||||
scanf("%d", &n);
|
||||
int a[n];
|
||||
printf("请输入整数序列:\n");
|
||||
for (i = 0; i < n; i++)
|
||||
scanf("%d", &a[i]);
|
||||
getMode(p, q, a, n);
|
||||
printf("众数:%d\n", Mode);
|
||||
printf("重数:%d\n", Mult);
|
||||
return 0;
|
||||
}
|
||||
void Middle(int a[], int n, int b[]) //确定左右界
|
||||
{
|
||||
int i, mid = n / 2; //取中间数字mid为界
|
||||
for (i = 0; i <= mid; i++) //找左界
|
||||
if (a[i] == a[mid])
|
||||
{
|
||||
b[0] = i;
|
||||
break; //此时b[0]为左界
|
||||
}
|
||||
for (i = mid + 1; i < n; i++) //找右界
|
||||
if (a[i] != a[mid])
|
||||
{
|
||||
b[1] = i;
|
||||
break; //此时b[1]为右界
|
||||
}
|
||||
}
|
||||
void getMode(int *Mode, int *Mult, int a[], int n) //求众数和重数
|
||||
{
|
||||
int tempNum, i = 0;
|
||||
int b[2] = {0, 0};
|
||||
int mid = n / 2;
|
||||
Middle(a, n, b);
|
||||
tempNum = b[1] - b[0];
|
||||
if (tempNum > *Mult) //如果中间数字的个数大于现在的重数,则更新
|
||||
{
|
||||
*Mode = a[mid];
|
||||
*Mult = tempNum;
|
||||
}
|
||||
if (b[0] + 1 > *Mult) //如果左边的个数>maxnum,则在左部开始搜索
|
||||
getMode(Mode, Mult, a, b[0] + 1);
|
||||
if (n - b[1] > *Mult) //如果右边的个数>maxnum,则在右部开始搜索
|
||||
getMode(Mode, Mult, a + b[1], n - b[1]);
|
||||
}
|
||||
|
||||
Loading…
Reference in new issue