题目1:
思路:我们定义两个变量left和right分别为数组的左端下标和右端下标。
左端下标的元素为奇数时,left++继续往前走,为偶数时就停下
右端下标的元素为偶数时,right- -往回走,为奇数时停下
停下后对应的元素交换。
代码实现如下:
#include <stdio.h>
void Num_round(int arr[], int sz)
{
int left = 0;
int right = sz - 1;
while (left < right)
{
//1.left指向为奇数,往前走,遇到偶数停下来
while (left < right && arr[left] % 2 != 0)
{
left++;
}
//2..right指向为偶数,往后走,遇到奇数停下来
while (left < right && arr[right] % 2 == 0)
{
right--;;
}
//3.停下来后两者进行交换
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
}
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7 };
int sz = sizeof(arr) / sizeof(arr[0]);
Num_round(arr, sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
题目2:
思路:只有当空瓶>1个时,才可以换饮料:
代码实现如下:
#include <stdio.h>
int main()
{
int money = 0;
scanf("%d", &money);
int empty = money;
int total = money;
while (empty > 1)
{
total = total + empty / 2;
empty = empty / 2 + empty % 2;
}
printf("%d\n", total);
return 0;
}
题目3:
思路:通过观察每一项,我们可知:
代码实现如下:
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
int sum = 0;
int tmp = 0;
for (int i = 0; i < 5; i++)
{
tmp = tmp * 10 + a;
sum += tmp;
}
printf("%d\n", sum);
return 0;
}
题目4:
思路:
这里需要注意的是右移的位数。
#include <stdio.h>
void Func(int n)
{
//偶数位
for (int i = 31; i >= 1; i-=2)
{
printf("%d ", (n >> i) & 1);
}
printf("\n");
//奇数位
for (int i = 30; i >= 0; i -= 2)
{
printf("%d ", (n >> i) & 1);
}
}
int main()
{
int n = 0;
scanf("%d", &n);
Func(n);
return 0;
}