diff --git a/ä¼—æ•°.cpp b/ä¼—æ•°.cpp new file mode 100644 index 0000000..e9da075 --- /dev/null +++ b/ä¼—æ•°.cpp @@ -0,0 +1,53 @@ +#include +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]); +} +