解读一下这段代码void threeNummin(int *arr,int n){ int *p = arr; int min = INT_MAX; int cnt = 0; int sum = 0; int m = n; for(int i =0; i<m ;i++){ if(cnt < 3){ sum += *(p+i); *(p+m) = *(p+i); cnt++; m++; } else{ cnt = 0; i--; min = min < sum ? min : sum; sum =0; } if( n % 2 ==0){ if(i ==n-1){ break; } } else{ if(n <n+2){ break; } } } printf("%d",min); } int main(){ int arr[10]={1,2,1,3,5,7,9,4,1,2}; threeNummin(arr,10); return 0; }
时间: 2024-04-28 12:25:53 浏览: 69
这是一个函数 `threeNummin`,用于找出一个整型数组中任意三个数的和的最小值。具体来说,该函数接收两个参数:一个指向整型数组的指针 `arr`,以及数组的长度 `n`。函数实现的过程如下:
1. 定义指针 `p` 指向数组的起始位置,定义变量 `min` 初始化为整型变量的最大值 `INT_MAX`,定义变量 `cnt` 和 `sum` 分别表示当前已经选取了几个数以及已选数的和,定义变量 `m` 表示当前数组的长度。
2. 使用循环遍历数组,对于每个遍历到的数,如果已经选取了不到三个数,就累加到 `sum` 中,同时将该数保存到数组的末尾,并将 `cnt` 和 `m` 分别加 1;如果已经选取了三个数,则将 `cnt` 和 `sum` 重置为 0,将 `i` 减 1(相当于退回到上一个数重新开始选数),并将 `min` 更新为当前 `sum` 和 `min` 中的较小值。
3. 如果数组的长度是偶数,当遍历到最后一个数时直接退出循环;如果数组的长度是奇数,当遍历到倒数第二个数时退出循环。
4. 输出最小值 `min`。
在 `main` 函数中,定义了一个长度为 10 的整型数组,并调用 `threeNummin` 函数对该数组进行处理。最终输出的结果为 4,表示选取数值为 1、1 和 2 的三个数的和为最小值。
相关问题
void find_min_max(int *arr, int n, int *min, int *max) { *min = *max = arr[0]; for (int i = 1; i < n; i++) { if (arr[i] < *min) { *min = arr[i]; } else if (arr[i] > *max) { *max = arr[i]; } } } int main() { int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}; int n = sizeof(arr) / sizeof(int); int min, max; find_min_max(arr, n, &min, &max); printf("最小值:%d,最大值:%d\n", min, max); return 0;
min, &max);
printf("min: %d, max: %d", min, max);
return 0;
}
你可以通过使用这个函数来找到一个数组中的最小值和最大值。
去掉最高值,去掉最低值,求平均值 用void Max(const int *arr,int len,int *max){} void Min(const int *arr,int len,int *min){} void Sum(const int *arr,int len,int *sum){} void Avg(int sum,int max,int min,int len,float *avg){} void test03(){ int arr[]={1,2,5,4,3,6,7}; int len =sizeof (arr)/sizeof (int); }
可以使用以下代码实现:
```
#include <iostream>
using namespace std;
void Max(const int *arr, int len, int *max) {
*max = arr[0];
for (int i = 1; i < len; i++) {
if (arr[i] > *max) {
*max = arr[i];
}
}
}
void Min(const int *arr, int len, int *min) {
*min = arr[0];
for (int i = 1; i < len; i++) {
if (arr[i] < *min) {
*min = arr[i];
}
}
}
void Sum(const int *arr, int len, int *sum) {
*sum = 0;
for (int i = 0; i < len; i++) {
*sum += arr[i];
}
}
void Avg(int sum, int max, int min, int len, float *avg) {
*avg = (float)(sum - max - min) / (len - 2);
}
void test03() {
int arr[] = {1, 2, 5, 4, 3, 6, 7};
int len = sizeof(arr) / sizeof(int);
int max, min, sum;
float avg;
Max(arr, len, &max);
Min(arr, len, &min);
Sum(arr, len, &sum);
Avg(sum, max, min, len, &avg);
cout << "Max: " << max << endl;
cout << "Min: " << min << endl;
cout << "Sum: " << sum << endl;
cout << "Avg: " << avg << endl;
}
int main() {
test03();
return 0;
}
```
运行结果为:
```
Max: 7
Min: 2
Sum: 28
Avg: 3.5
```
阅读全文