鱼C论坛

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

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

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

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

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

x
QQ图片20211125175129.jpg
最佳答案
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> 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-9-23 03:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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