zoukankan      html  css  js  c++  java
  • 18.12.02-C语言练习:韩信点兵

    C语言练习:韩信点兵

    题目说明:本题是中国经典问题,有多种解法,从数论课程角度看,是一个不定方程组,而且答案不唯一。

    但这里采用程序解法,使用的是暴力破解。枚举可能的解,然后根据条件判断,满足所有条件时的数字就是所求解。

    程序:

     1 #include <stdio.h>
     2 
     3 int main(int argc, char *argv[]) {
     4     
     5     int ans = -1;
     6     int i;
     7     for(i=1; i<=10000; i += 5) {
     8         if((i%6==5) && (i%7==4) && (i%11==10)) {
     9             ans = i;
    10             break;
    11         }
    12     }
    13     if(ans!=-1) {
    14         printf("There are %d soilders.
    ", ans);
    15     } else {
    16         printf("There are no answer.
    ");
    17     }
    18     
    19     return 0;
    20 }

    程序解释

    6-7行:i 是循环变量,for循环中自增部分 i+=5,意思是按5自增,因初始值是 1, i 从 1 开始 每步加5,所以 i 的取值是 1,6, 11,... 这样也就满足了第一个条件。

    8行:这里有三个条件,1%6==5,就是从1至6报数,最末一个士兵报的数是5,;其余两个条件类似。

    9 - 10行:执行到这一行,说明满足所有条件,把 i 的值赋给变量ans保留结果; 然后在第10行利用break结束循环继续执行,因为程序已经找到答案了。

    执行结果

    解不唯一,稍微改一下程序,得到在10000内的结果

    知识扩展: 

    本题从数学(数论)角度看是一个不定方程组问题,相关问题和知识可以参考这里

    孙子定理(又称 中国剩余定理) https://baike.baidu.com/item/%E5%AD%99%E5%AD%90%E5%AE%9A%E7%90%86/2841597?fr=aladdin

    另外这里有别人写的类似的程序:https://www.cnblogs.com/freinds/p/6388992.html

    有关不定方程组的问题可以随便找一本数论书都可以看到相关详细理论,这里不再赘述。

  • 相关阅读:
    数据库模糊查询
    Redis集群简介
    POI导出Excel的三种 workbook的区别
    mysql主从跳过错误
    MySQL server has gone away 问题解决方法
    Redis批量删除key的命令
    Python 3.6学习笔记(一)
    maven项目报错
    使用zabbix监控mysql的三种方式
    postgresql初体验
  • 原文地址:https://www.cnblogs.com/coder211/p/10055087.html
Copyright © 2011-2022 走看看