• C语言百日刷题第九天


    前言

    今天是刷题第9天,放弃不难,但坚持一定很酷~
    快来跟我一起刷题吧。
    加油,一起努力进步
    在这里插入图片描述

    76.计算偶数的所有质因子

    输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)
    输入一个整数
    输出描述:
    按照从小到大的顺序输出它的所有质数的因子,以空格隔开。
    示例1
    输入:180
    输出:2 2 3 3 5
    先普及一下什么叫做质因子

    在这里插入图片描述

    #include 
    
    void printPrimeFactors(int n) {
        // 从 2 开始尝试除数
        for (int i = 2; i <= n; i++) {
            // 当 i 是 n 的因子时,不断输出 i,并更新 n 为 n/i
            while (n % i == 0) {
                printf("%d ", i);
                n /= i;
            }
        }
    }
    
    int main() {
        int number;
    
        // 从用户输入获取正整数
        printf("请输入一个正整数:");
        scanf("%d", &number);
    
        // 输出质因子
        printf("质因子:");
        printPrimeFactors(number);
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    77. 提取不重复的整数

    在这里插入图片描述


    方法一:除以10求余,得到每一位数字,放入数组之前与数组中已存在的数据对比,不重复的数据才能存入数组

    #include
    #include
    int main()
    {
        int num=0,size=0,flag=1;
        char str[10000]={0},ch;
        scanf("%d",&num);
        for(;num%10 != 0;num=num/10)//外for循环逆序读取每一位数字
        {
            flag=1;
            ch = num%10 + '0';//整型->字符
            for(int j=0;j<=size;j++)//内for循环将每一位数字和数组中的比较
                if(str[j]==ch)
                {
                    flag=0;//数字重复标志
                    break;
                }
            if(flag)
            {
                str[size++]=ch;//数组大小size动态增加
            }
        }
        printf("%s",str);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    方法二:首先循环提取输入数的最低位,维护一个大小为10的数组,判断数组中是否有提取的这个数位。

    • 如果有则把输入数除等于10,继续提取下一数位。
    • 如果没有仍要把输入数除等于10,并将此数位添加到数组中,结果乘10再加上此数位.
    • 提取到最高位即可输出结果
    #include
    int main()
    {
        int num = 0,result=0;
        int arr[10] = {0};
        scanf("%d",&num);
        while(num != 0)
        {
            if(arr[num%10]==0)
            {
                arr[num%10]=1;
                result=result*10+(num%10);
            }
       
            num=num / 10;
        }
        printf("%d\n",result);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    78.二进制中1的个数

    在这里插入图片描述


    方法一:取余求解

    #include
    int main()
    {
    	int input = 0;
    	int count = 0;
    	scanf("%d", &input);
    	while (input)
    	{
    		if (input % 2 == 1)
    		{
    			count++;
    		}
    		input /= 2;
    	}
    	printf("%d\n", count);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    方法二:位运算

    #include
    int main()
    {
        int input = 0;
        scanf("%d", &input);
        int count = 0;
        while (input)
        {
            input &= (input - 1); 
            count++;
        }
        printf("%d\n", count);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    & : 按位与:转化为2进制后相同位置数有0则为0
    | : 按位或:转化为2进制后相同位置数有1则为1
    ^ : 按位异或 :转化为2进制后相同位置相同则为0相异则为1

    79.猴子分桃

    海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?
    分析:猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。这就意味着先将桃子数减去1,然后再拿走五分之一数量的桃子,只剩下五分之四的桃子,并且下一次分桃又重复着这种操作,总共进行了5次。自然而然的想到使用循环解决。

    #include
    int main ()
    {
    int monkey = 1;
    int peach = 1;
    int count = 1;
    while (monkey <= 5) 
    {
       
        if (peach % 5 == 1) 
        {
            peach = (peach / 5) * 4;
            monkey++;
        }
        else 
        {
            count++; 
            peach = count; 
            monkey = 1; 
        }
    }
    printf("桃的最小总数为:%d", count);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    80.百钱买百鸡

    中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?翻译成人话就是:
    公鸡5元一只;母鸡3元一只;雏鸡一元3只。百钱买百鸡,问鸡翁、母、雏各几只?
    分析:这题共有三个限制条件,3 种鸡的钱数总和为 100。 3 种鸡的数量之和为 100小鸡数必须是 3 的倍数
    使用循环,满足三种情况的全部枚举出来就好了。

    #include 
    int main()
    {
        int a,b,c;
        for (a=0;a<=20;a++)
        {
            for(b=0;b<=33;b++)
            {
                c=(100-5*a-3*b)*3;
                if(a+b+c==100)
                    printf("公鸡是%d只,母鸡是%d只,雏鸡是%d只.\n",a,b,c);
            }
        }
    }
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    微信小程序动态添加表单模块
    leetcode算法之分治-快排
    flask项目起步(1)
    LuatOS-SOC接口文档(air780E)--errDump - 错误上报
    从字节码层面分析Lambda
    Flowable监听器动态调用Springcloud接口
    【网页前端】CSS样式表入门概述以及基本语法格式和选择器
    SpringBoot面试专题及答案
    告诉你如果对一个新产品进行测试
    Docker入门
  • 原文地址:https://blog.csdn.net/weixin_61084441/article/details/127877094