【c语言】流程控制语句学习(2)

一、韩信点兵问题

相传韩信才智过人,从不清点自己军队人数,只要让士兵先后以三人一排,五人一排,七人一排地变换队形,而它每次只掠一眼队尾就知道总人数了,请输入3个非负数a,b,c,表示每种队形队尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解),已知总人数不小于10,不大于100.

运行效果:

假设输入 a=2, b=3, c=2,则程序输出 23,因为:

  • 23 %  3 = 2
  • 23 %  5 = 3
  • 23 %  7 = 2

代码展示:

#include <stdio.h>

int main() {
    int a, b, c;
    int x;  // x是总人数,范围从10到100
    
    printf("请输入3个非负整数(表示模3, 模5, 模7的余数):");
    scanf("%d %d %d", &a, &b, &c);
    
    int found = 0;
    for ( x = 10; x <= 100; x++) 
	{
        if (x % 3 == a && x % 5 == b && x % 7 == c) 
		{
            printf("总人数的最小值为: %d\n", x);
            found = 1;
            break;
        }
    }
    
    if (!found) {
        printf("无解。\n");
    }

    return 0;
}

二、求0~n中出现2的次数

请编写一个程序,求0~n中2出现的次数。

运行效果:

测试用例:
        10 返回1     12  返回2
        20 返回3     21  返回4
        22 返回6     23  返回7        

代码展示:

#include<stdio.h>

int main()
{
	int n,i;
	int count = 0;
	
    printf("请输入一个数字n:");
    scanf("%d", &n);
	
	 // 遍历从0到n的所有数字
    for (i = 0; i <= n; i++) 
	{
		 int number = i;
        // 对数字,逐位检查
        while (number > 0) 
		{
            if (number % 10 == 2)
			 {
                count++;
            }
            number /= 10;
        }
    }
    printf("从0到%d数字2出现的次数为:%d\n", n, count);
    return 0;
}

三、数字组合

有1、2、3、4个数字,能组成多少个互不相同且无重复的三位数?都是什么?

运行效果:

代码展示:

#include <stdio.h>
	
int main() 
{
	int i,j,k;
	int count = 0;
	
	// 使用三重循环来生成所有可能的三位数
	for ( i = 1; i < 5; i++) 
	{
	    for ( j = 1; j < 5; j++)
		 {	        
	        for ( k = 1; k < 5; k++) 
			{
	            if (i != j && k != i && k != j) 
	            {
	            	printf("%d%d%d\t", i, j, k);
	            	count++;
	            	// 如果已经输出了五个三位数,就换行
                    if (count % 5 == 0) 
                    {
                        printf("\n");
                    }
				}
	            
	        }
	    }
	}
	printf("\n总共有 %d 个不同的三位数\n", count);	
	return 0;
}

四、斐波那契额数列

打印斐波那契额数列第n项的数字
斐波那契额数列数字:1  1  2  3  5  8  12  21  34......

规律:

  • F(1) = 1
  • F(2) = 1
  • F(n) = F(n-1) + F(n-2)n > 2

运行效果:

代码展示:

#include <stdio.h>

int main() 
{
    int n,i;
    printf("请输入要打印的斐波那契数列的第n项:");
    scanf("%d", &n);

    if (n <= 0) {
        printf("请输入一个大于0的正整数。\n");
        return 1;
    }

    int first = 1, second = 1, next = 1;

    if (n == 1 || n == 2) 
	{
        next = 1;
    } 
	else 
	{
        for ( i = 3; i <= n; i++) 
		{
            next = first + second;  // n项
            first = second;         // n-2项
            second = next;          // n-1项
        }
    }

    printf("第%d项是: %d\n", n, next);

    return 0;
}

五、素数

打印出2~1000内所有的素数,并打印个数;
素数就是除了1和它本身再没有其他因数了。

运行效果:

代码展示:

#include <stdio.h>
int main(void)
{
	int count=0;
	int i,j;
	//遍历2到1000
	for ( i = 2; i <= 1000 ; i++)
	{
		//除以2到它本身的数,如果之间有可以整除的数,则不为素数,结束循环
		for ( j = 2; j < i ; j++)
		{
			if (i%j==0)
			{
				break;
			}
		}
		//打印素数并计数
		if (i==j)
		{
			count++;
			printf("%d\t",i);
			// 如果已经输出了五个三位数,就换行
            if (count % 8 == 0) 
            {
                printf("\n");
            }
		}
	}
	//打印个数
	printf("\n共有%d个\n",count);
	return 0;
}

制作不易,请抬抬珍贵的小手,点赞+收藏+关注,谢谢!!!

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值