鱼C论坛

 找回密码
 立即注册
查看: 845|回复: 3

[已解决]救救孩子吧,数组和函数的题

[复制链接]
发表于 2021-11-25 17:54:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
QQ图片20211125175129.jpg
最佳答案
2021-11-25 19:17:09
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <stdbool.h>
  5. int arr[100];

  6. /*随机产生 100 个 [50, 9000] 之间的随机数*/
  7. void isRandom(){ for(size_t i = 0; i < 100; i++) arr[i] = (rand() % (9000 - 50 + 1)) + 50; }

  8. /*判断该数是否被 5、7、9 除余数均为 2*/
  9. bool isTrue(int num){ return ((num%5 == 2) && (num%7 == 2) && (num%9 == 2)); }

  10. /*被 5、7、9 除余数均为 2 的数的个数*/
  11. int count(){
  12.     int res = 0;
  13.     for(size_t i = 50; i <= 9000; i++){
  14.         if(isTrue(i)){
  15.             res++;
  16.         }
  17.     }
  18.     return res;
  19. }

  20. /*选择法降序*/
  21. void sort(int n, int arr[n]){
  22.     for(size_t i = 0; i < n; i++){
  23.         for(size_t j = i+1; j < n; j++){
  24.             if(arr[j] < arr[i]){
  25.                 arr[i] ^= arr[j];
  26.                 arr[j] ^= arr[i];
  27.                 arr[i] ^= arr[j];
  28.             }
  29.         }
  30.     }
  31. }

  32. /*折半查找法*/
  33. int find(int start, int end, int arr[], int num){
  34.     int mid = (start + end) >> 1;
  35.     if(mid > 0){
  36.         if(num < arr[mid]) find(start, mid, arr, num);
  37.         else if(num > arr[mid]) find(mid+1, end, arr, num);
  38.         else return mid;
  39.     }
  40.     else if(!(mid)) return arr[0] == num ? 0 : -1;
  41. }

  42. int main()
  43. {
  44.     isRandom(); // 调用函数:随机产生 100 个 [50, 9000] 之间的随机数
  45.     printf("100 个随机数:\n");
  46.     for(size_t i = 0; i < 100; i++){
  47.         printf("%d ", arr[i]);
  48.         if(!((i+1)%10)) printf("\n");
  49.     }
  50.    
  51.     printf("位于 [50, 9000] 之间能被 5、7、9 除余数均为 2 的数的个数:%d\n", count()); // 调用函数:计算出被 5、7、9 除余数均为 2 的数的个数
  52.     sort(100, arr); // 调用函数:选择法降序
  53.    
  54.     int x;
  55.     printf("输入一个整数位于 [50, 9000] 之间:");
  56.     scanf("%d", &x);
  57.     int res = find(0, 100, arr, x);
  58.     res >= 0 ? printf("%d 在数组位置:%d\n", x, res) : printf("数字 %d 不存在数组里\n", x);
  59.     return 0;
  60. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-25 19:17:09 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <stdbool.h>
  5. int arr[100];

  6. /*随机产生 100 个 [50, 9000] 之间的随机数*/
  7. void isRandom(){ for(size_t i = 0; i < 100; i++) arr[i] = (rand() % (9000 - 50 + 1)) + 50; }

  8. /*判断该数是否被 5、7、9 除余数均为 2*/
  9. bool isTrue(int num){ return ((num%5 == 2) && (num%7 == 2) && (num%9 == 2)); }

  10. /*被 5、7、9 除余数均为 2 的数的个数*/
  11. int count(){
  12.     int res = 0;
  13.     for(size_t i = 50; i <= 9000; i++){
  14.         if(isTrue(i)){
  15.             res++;
  16.         }
  17.     }
  18.     return res;
  19. }

  20. /*选择法降序*/
  21. void sort(int n, int arr[n]){
  22.     for(size_t i = 0; i < n; i++){
  23.         for(size_t j = i+1; j < n; j++){
  24.             if(arr[j] < arr[i]){
  25.                 arr[i] ^= arr[j];
  26.                 arr[j] ^= arr[i];
  27.                 arr[i] ^= arr[j];
  28.             }
  29.         }
  30.     }
  31. }

  32. /*折半查找法*/
  33. int find(int start, int end, int arr[], int num){
  34.     int mid = (start + end) >> 1;
  35.     if(mid > 0){
  36.         if(num < arr[mid]) find(start, mid, arr, num);
  37.         else if(num > arr[mid]) find(mid+1, end, arr, num);
  38.         else return mid;
  39.     }
  40.     else if(!(mid)) return arr[0] == num ? 0 : -1;
  41. }

  42. int main()
  43. {
  44.     isRandom(); // 调用函数:随机产生 100 个 [50, 9000] 之间的随机数
  45.     printf("100 个随机数:\n");
  46.     for(size_t i = 0; i < 100; i++){
  47.         printf("%d ", arr[i]);
  48.         if(!((i+1)%10)) printf("\n");
  49.     }
  50.    
  51.     printf("位于 [50, 9000] 之间能被 5、7、9 除余数均为 2 的数的个数:%d\n", count()); // 调用函数:计算出被 5、7、9 除余数均为 2 的数的个数
  52.     sort(100, arr); // 调用函数:选择法降序
  53.    
  54.     int x;
  55.     printf("输入一个整数位于 [50, 9000] 之间:");
  56.     scanf("%d", &x);
  57.     int res = find(0, 100, arr, x);
  58.     res >= 0 ? printf("%d 在数组位置:%d\n", x, res) : printf("数字 %d 不存在数组里\n", x);
  59.     return 0;
  60. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2021-11-25 19:37:40 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-27 15:03:29 | 显示全部楼层

太牛了谢谢大佬!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 00:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表