#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int n = 0; int arr[1000] = { 0 }; int sum = 0; int count = 0; int count2 = 0; printf("请输入你要输入的整数个数\n"); // 检查数组越界 scanf("%d", &n); if (n > 1000) { printf("输入的整数个数过多,最多只能输入1000个整数。\n"); return 1; // 返回一个非零值表示出错 } for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); if (arr[i] < 0) { count++; } else if (arr[i] > 0) { count2++; sum += arr[i]; } } // 检查是否有正数输入以避免除零错误 if (count2 == 0) { printf("没有输入正数,无法计算平均值。\n"); return 1; // 返回一个非零值表示出错 } printf("%d %d", count, sum / count2); return 0; }
int minNumberInRotateArray(int* nums, int size ) { int l = 0, r = size - 1;//定义左指针l指向数组的起始位置,右指针r指向数组的末尾位置 while (l < r && nums[r] == nums[0]) r--;//如果数组的末尾元素与起始元素相同,则可能有多个旋转点。因此,我们不断地将右指针向左移动,直到它指向一个与起始元素不同的值,或者左指针与右指针相遇 if (nums[l] <= nums[r]) return nums[0];//如果经过上述步骤后,左指针的值仍然小于或等于右指针的值,这意味着整个数组可能是已经排序的(没有旋转),或者只有一个旋转点且该点的值与起始值相同。在这种情况下,我们只需返回起始元素 while (l < r) { int mid = (l + r)/2;//使用二分查找策略在数组中找到旋转点。每次取数组的中点mid,并检查该点的值是否小于起始元素。 //如果nums[mid] < nums[0],这意味着mid在旋转点的右侧,因此我们将右指针移动到mid。 //否则,mid在旋转点的左侧或就是旋转点本身,我们将左指针移动到mid + 1 if (nums[mid] < nums[0]) r = mid; else l = mid + 1; } return nums[r]; }