I am a teacher!

导航

习题解析之:物不知数

【问题描述】

“物不知数”出自《孙子算经》。题目为:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?。

意思是说有一些物品,不知道有多少个,如果一次 3 个 3 个地数,还多出 2 个;一次 5 个 5 个地数则多出 3 个;一次  7 个 7 个地数会多出 2 个。

现假设物品总数不超过 n (n<=1000),请编程计算满足条件的物品个数并输出。

输入格式:

输入为一个正整数 n,题目保证 0 < n <= 1000 。

输出格式:

输出不超过 n 且满足条件的物品个数 m,如果有多个解,则分行输出,每行一个解;如果无解则输出 No solution!。

输入:

10

输出:

No solution!

【穷举法的基本思想】

        本题采用穷举法(也称枚举法)来解决。

        穷举是用计算机求解问题最常用的方法之一,常用来解决那些通过公式推导、规则演绎的方法不能解决的问题。采用穷举法求解一个问题时,通常先建立一个数学模型,包括一组变量、以及这些变量需要满足的条件。问题求解的目标就是确定这些变量的值。根据问题的描述和相关的知识,能为这些变量分别确定一个大概的取值范围。在这个范围内对变量依次取值,判断所取的值是否满足数学模型中的条件,直到找到全部符合条件的值为止。

        穷举法(枚举法)的基本思想是:列举出所有可能的情况,逐个判断有哪些是符合问题所要求的条件,从而得到问题的全部解答。

        它利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检查,从中找出符合要求的答案。

        用穷举算法解决问题,通常可以从两个方面进行分析。

         (1)问题所涉及的情况:问题所涉及的情况有哪些,情况的种数可不可以确定。把它描述出来。应用穷举时对问题所涉及的有限种情形必须一一列举,既不能重复,也不能遗漏。重复列举直接引发增解,影响解的准确性;而列举的遗漏可能导致问题解的遗漏。

         (2)答案需要满足的条件:分析出来的这些情况,需要满足什么条件,才成为问题的答案。把这些条件描述出来。

        只要把这两个方面分析好了,问题自然会迎刃而解。

        穷举通常应用循环结构来实现。在循环体中,根据所求解的具体条件,应用选择结构实施判断筛选,求得所要求的解。

        穷举法的程序框架一般为:

        cnt=0       # 解的个数初值为0

        for   k   in  穷举的范围(<区间下限>,<区间上限>) :        # 根据指定范围实施穷举

                if  <约束条件> :                             # 根据约束条件实施筛选

                         print(<满足要求的解>)         # 输出满足要求的解

                         cnt += 1                               # 统计解的个数

        if  cnt == 0 :                                          # 问题无解

                print('问题无解!')

【源程序】

        按上面介绍的穷举法程序一般框架,编写源程序如下:

 image

 

posted on 2025-11-07 15:21  aTeacher  阅读(31)  评论(0)    收藏  举报