//至少是其他数字两倍的最大数
int My_get(int* nums, int max,int sz)
{
int left = 0;
int right = sz - 1;
int mid = 0;
while (left <= right)
{
mid = left + (right - left) / 2;
if (nums[mid] < max)
{
left = mid + 1;
}
else if (nums[mid] > max)
{
right = mid - 1;
}
else
{
return mid;
}
}
}
int main()
{
//输入数组
int nums[3] = { 0 };
//计算元素个数
int sz = sizeof(nums) / sizeof(nums[0]);
//判断数组个数为一个时的情况
if (sz == 1)
{
printf("0\n");
return 0;
}
int i = 0;
//最大值
int max = 0;
for (i = 0; i < sz; i++)
{
scanf("%d", &nums[i]);
//假设第一个元素就为最大值
if (0 == i)
{
max = nums[i];
continue;
}
//依次比较,得出最大值
if (max < nums[i])
{
max = nums[i];
}
}
//调用函数,利用二分法求出最大值得下标
int k = My_get(nums, max,sz);
//定义变量用于判断最大值是否至少为其它数的两倍
int falt = 1;
//判断该最大值是否至少为其他数字的两倍
for (i = 0; i < sz; i++)
{
//防止最大值*2后比较
if (i == k)
{
continue;
}
if (nums[i] * 2 > max)
{
falt = 0;
printf("-1\n");
}
}
if(1 == falt)
{
printf("%d\n", k);
}
return 0;
}
【C语言】至少是其他数字两倍的最大数
最新推荐文章于 2024-06-07 09:40:26 发布