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