C语言:穷举法编程韩信点兵问题四种做法

目录

[第一种 for+break](#第一种 for+break)

[第二种 for+exit](#第二种 for+exit)

[第三种 使用标志变量,可读性比较好的方法](#第三种 使用标志变量,可读性比较好的方法)

[第四种 标志变量+ do-while 可读性还要好](#第四种 标志变量+ do-while 可读性还要好)


韩信有一对兵,他想知道有多少人,便让士兵排队报数。按从1至5报数,最末一个士兵报的数为1;按1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后按1至11报数,最末一个士兵报的10。请编程计算韩信至少有多少兵。

思路:

求余数。假定韩信有x个兵,那么x需要满足

x%5==1 && x%6==5 && x%7==4 &&x %11 ==10

第一种 for+break

cs 复制代码
#include <stdio.h>
int main()
{
    int x;
    for (x=1;;x++)
    {   
        if (x%5==1&& x%6==5 && x%7==4 && x%11 ==10)
        {
            printf("一共有%d个兵",x);
            break;  //终止循环
        }
    }
}

第二种 for+exit

cs 复制代码
#include <stdio.h>
#include <stdlib.h> //新增头文件
int main()
{
    int x;
    for (x=1;;x++)
    {   
        if (x%5==1&& x%6==5 && x%7==4 && x%11 ==10)
        {
            printf("一共有%d个兵",x);
            exit(0);  //直接结束程序运行
        }
    }
}

第三种 使用标志变量,可读性比较好的方法

cs 复制代码
#include<stdio.h>
int main()
{
    int find=0; //定义标志变量find,find=0未找到
    int i,x;
    for (x=1;find==0;x++)
    {
        if (x%5==1 && x%6==5 && x%7==4 &&x %11 ==10)
        {
            printf("一共有%d个兵",x);
            find=1; //找到了,改成1,后面就进不了for循环
        }
    }
}

其中 for (x=1;find==0;x++)可以替换成 for (x=1;!find;x++)

第四种 标志变量+ do-while 可读性还要好

cs 复制代码
#include<stdio.h>
int main()
{
    int x=0;  //因为do while循环会对x加1,这里才写0
    int find=0; //定义标志变量,0是没找到
    do
    {
        x++;
        find = (x%5==1 && x%6==5 && x%7==4 &&x %11 ==10);
    }while (find==0); //没找到才会循环
    printf("一共有%d个兵",x);
}

其中while 后面的find==0 可以替换成 !find

运行结果是一样的,如下

相关推荐
贾全5 分钟前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人
rzl0211 分钟前
java web5(黑马)
java·开发语言·前端
GIS小天20 分钟前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月4日第128弹
人工智能·算法·机器学习·彩票
jingling55523 分钟前
面试版-前端开发核心知识
开发语言·前端·javascript·vue.js·面试·前端框架
满分观察网友z38 分钟前
开发者的“右”眼:一个树问题如何拯救我的UI设计(199. 二叉树的右视图)
算法
m0_6873998442 分钟前
写一个Ununtu C++ 程序,调用ffmpeg API, 来判断一个数字电影的视频文件mxf 是不是Jpeg2000?
开发语言·c++·ffmpeg
Natsume17101 小时前
嵌入式开发:GPIO、UART、SPI、I2C 驱动开发详解与实战案例
c语言·驱动开发·stm32·嵌入式硬件·mcu·架构·github
爱上语文1 小时前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端
A~taoker1 小时前
taoker的项目维护(ng服务器)
java·开发语言
萧曵 丶1 小时前
Rust 中的返回类型
开发语言·后端·rust