
#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];
}