给出下面的问题的C语言代码实现:给定含有n个正整数的数列,进行如下两步操作。 (1)每次删除其中的两个数a和b。 (2)在数列中加入一个数a*b+1。 循环执行步骤(1)、(2)直到集合中只剩下一个元素为止。在所有按这种操作方式最后得到的数中,最大的数记为max,最小的数记为min,则该数列的极差定义为M=max-min。 分析:通过3,5,7三个数字讨论 (3*5+1)*7+1=113 (3*7+1)*5+1=111(5*7+1)*3+1=109 由此可见,每次取其中最小的两个数最后得到的值最大,反之每次取最大的两个数值最小 输入 第一行是数列的长度n,第二行起是数列中的n个数,相邻两个数有空格分隔。 输出 数列极差M
时间: 2024-02-15 14:03:28 浏览: 141
```
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int main() {
int n;
scanf("%d", &n);
int *nums = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
qsort(nums, n, sizeof(int), cmp);
int max = nums[n - 1], min = nums[0];
while (n > 1) {
int a = nums[0], b = nums[1];
nums[0] = a * b + 1;
for (int i = 1; i < n - 1; i++) {
nums[i] = nums[i + 1];
}
n--;
qsort(nums, n, sizeof(int), cmp);
if (nums[n - 1] > max) {
max = nums[n - 1];
}
if (nums[0] < min) {
min = nums[0];
}
}
int range = max - min;
printf("%d\n", range);
free(nums);
return 0;
}
```
阅读全文