序列的中间数.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. // 辅助函数:比较函数,用于qsort排序
  4. int compare(const void *a, const void *b) {
  5. return (*(int *)a - *(int *)b);
  6. }
  7. int findMedianNumber(int arr[], int n) {
  8. // 先对数组进行排序
  9. qsort(arr, n, sizeof(int), compare);
  10. // 检查中位数是否符合要求
  11. int medianIndex = n / 2;
  12. int median = arr[medianIndex];
  13. // 计算比中位数小和大的元素数量
  14. int smaller = 0, larger = 0, i;
  15. for (i = 0; i < n; i++) {
  16. if (arr[i] < median) {
  17. smaller++;
  18. } else if (arr[i] > median) {
  19. larger++;
  20. }
  21. }
  22. // 检查条件
  23. if (smaller == larger) {
  24. return median;
  25. } else {
  26. return -1;
  27. }
  28. }
  29. int main() {
  30. int n;
  31. // 读取整数序列的数量
  32. scanf("%d", &n);
  33. int arr[n], i;
  34. // 读取整数序列
  35. for (i = 0; i < n; i++) {
  36. scanf("%d", &arr[i]);
  37. }
  38. // 找到中间数
  39. int result = findMedianNumber(arr, n);
  40. // 输出结果
  41. printf("%d\n", result);
  42. return 0;
  43. }