用C语言编写给定一个整数数组arr1,返回一个新数组arr2。实现arr2[i]的值是arr1[i]右侧大于arr1[i]的元素的数量。
时间: 2025-01-01 22:38:32 浏览: 9
在C语言中,你可以通过遍历数组并利用计数器来实现这个功能。这里是一个简单的示例函数来完成这个任务:
```c
#include <stdio.h>
#include <stdlib.h>
int* count_greater_elements(int* arr1, int n) {
int* arr2 = (int*)malloc(n * sizeof(int)); // 为新数组分配内存
if (arr2 == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
for (int i = 0; i < n; i++) {
int count = 0;
for (int j = i + 1; j < n; j++) { // 遍历从i+1到n的元素
if (arr1[j] > arr1[i]) {
count++;
}
}
arr2[i] = count; // 将计数值存储到新数组
}
return arr2;
}
void print_array(int* arr, int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr1[] = {5, 2, 9, 1, 7};
int n = sizeof(arr1) / sizeof(arr1[0]);
int* arr2 = count_greater_elements(arr1, n);
if (arr2) {
printf("Array with counts of greater elements:\n");
print_array(arr2, n);
free(arr2); // 释放动态分配的内存
} else {
return -1;
}
return 0;
}
```
在这个例子中,`count_greater_elements`函数首先创建了一个新数组`arr2`,然后遍历原数组`arr1`,对于每个元素,它会检查从该元素后面的元素,如果发现有比当前元素大的,就计数器加一。最后将计数结果存入新数组。`main`函数则展示了如何使用这个函数,并打印出结果。
阅读全文