|
发表于 2021-11-25 19:17:09
|
显示全部楼层
本楼为最佳答案
 - #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <stdbool.h>
- int arr[100];
- /*随机产生 100 个 [50, 9000] 之间的随机数*/
- void isRandom(){ for(size_t i = 0; i < 100; i++) arr[i] = (rand() % (9000 - 50 + 1)) + 50; }
- /*判断该数是否被 5、7、9 除余数均为 2*/
- bool isTrue(int num){ return ((num%5 == 2) && (num%7 == 2) && (num%9 == 2)); }
- /*被 5、7、9 除余数均为 2 的数的个数*/
- int count(){
- int res = 0;
- for(size_t i = 50; i <= 9000; i++){
- if(isTrue(i)){
- res++;
- }
- }
- return res;
- }
- /*选择法降序*/
- void sort(int n, int arr[n]){
- for(size_t i = 0; i < n; i++){
- for(size_t j = i+1; j < n; j++){
- if(arr[j] < arr[i]){
- arr[i] ^= arr[j];
- arr[j] ^= arr[i];
- arr[i] ^= arr[j];
- }
- }
- }
- }
- /*折半查找法*/
- int find(int start, int end, int arr[], int num){
- int mid = (start + end) >> 1;
- if(mid > 0){
- if(num < arr[mid]) find(start, mid, arr, num);
- else if(num > arr[mid]) find(mid+1, end, arr, num);
- else return mid;
- }
- else if(!(mid)) return arr[0] == num ? 0 : -1;
- }
- int main()
- {
- isRandom(); // 调用函数:随机产生 100 个 [50, 9000] 之间的随机数
- printf("100 个随机数:\n");
- for(size_t i = 0; i < 100; i++){
- printf("%d ", arr[i]);
- if(!((i+1)%10)) printf("\n");
- }
-
- printf("位于 [50, 9000] 之间能被 5、7、9 除余数均为 2 的数的个数:%d\n", count()); // 调用函数:计算出被 5、7、9 除余数均为 2 的数的个数
- sort(100, arr); // 调用函数:选择法降序
-
- int x;
- printf("输入一个整数位于 [50, 9000] 之间:");
- scanf("%d", &x);
- int res = find(0, 100, arr, x);
- res >= 0 ? printf("%d 在数组位置:%d\n", x, res) : printf("数字 %d 不存在数组里\n", x);
- return 0;
- }
复制代码 |
|