题目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;
}