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

运行结果是一样的,如下

相关推荐
木井巳2 分钟前
【递归算法】找出所有子集的异或总和再求和
java·算法·leetcode·决策树·深度优先
froginwe115 分钟前
SVN 创建版本库
开发语言
2501_924952697 分钟前
C++中的枚举类高级用法
开发语言·c++·算法
闭关苦炼内功7 分钟前
使用Java语言实现二分查找
java·开发语言
2401_873204659 分钟前
代码覆盖率工具实战
开发语言·c++·算法
xht083211 分钟前
PHP vs C++:编程语言终极对决
java·开发语言
少司府12 分钟前
C++基础入门:第一个C++程序
java·c语言·开发语言·c++·ide
不染尘.12 分钟前
欧拉路径算法
开发语言·数据结构·c++·算法·图论
Greg_Zhong15 分钟前
Js中异步编程的知识扩展【异步有哪些、如何执行、宏任务和微任务等】
开发语言·javascript
黎阳之光25 分钟前
黎阳之光:数智技术赋能水利“平急两用” 筑牢水利工程安全防线
大数据·人工智能·算法·安全·数字孪生