统计两个一维数组a和b中元素的关系.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. // 比较函数,用于排序
  4. int compare(const void *a, const void *b) {
  5. return (*(int *)a - *(int *)b);
  6. }
  7. int main() {
  8. int a[10]; // 数组a,无序
  9. int b[5]; // 数组b,升序
  10. int c[4] = {0}; // 结果数组c,包含4个元素,对应于b的前4个元素之间的区间
  11. int i, k;
  12. // 读取数组a
  13. for (i = 0; i < 10; ++i) {
  14. scanf("%d", &a[i]);
  15. }
  16. // 读取数组b
  17. for (i = 0; i < 5; ++i) {
  18. scanf("%d", &b[i]);
  19. }
  20. // 对数组a进行排序
  21. qsort(a, 10, sizeof(int), compare);
  22. printf("c = ");
  23. // 遍历数组b的每个区间[b[k], b[k+1]]
  24. for (k = 0; k < 4; ++k) {
  25. int left = 0; // 区间开始位置
  26. int right = 0; // 区间结束位置
  27. // 找到大于b[k]的第一个元素位置
  28. while (right < 10 && a[right] <= b[k]) {
  29. right++;
  30. }
  31. // 统计大于b[k]小于b[k+1]的元素个数
  32. while (right < 10 && a[right] < b[k + 1]) {
  33. right++;
  34. c[k]++;
  35. }
  36. }
  37. // 输出结果数组c
  38. for (i = 0; i < 4; ++i) {
  39. printf("%d ", c[i]);
  40. }
  41. printf("\n");
  42. return 0;
  43. }