解题思路: 枚举(两层嵌套循环枚举)从输入两个数的乘积开始递减循环


注意事项:

参考代码:

#include<stdio.h>


int main()

{

    int m, n,a,p;

    scanf("%d%d", &m, &n);    //输入两个数m,n

    a = m * n;

    while (1)

    {

        p = 1;

        for (int i = 0; i <= n; i++)    //双层嵌套循环枚举

        {

            for (int j = 0; j <=m ; j++)

            {

                if (a%m==0||a%n==0||i * m + j * n == a)        //当a能被m或n整除时直接a--

               {    

                    a--;

                    p = 0;

                    break;

                }

            }

        }

        if (p == 1)break;    //当循环中a不满足条件时推出while循环

    }

    printf("%d", a);    //输出a

    return 0;

}


点赞(0)
 

0.0分

9 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 10 条评论

化繁为简 2年前 回复TA
@化繁为简 谢谢各位
uq_52514251541 2年前 回复TA
@uq_38501086476 两个偶数,所有的奇数都买不到,不能买的数码无限大
小安 2年前 回复TA
@化繁为简 我觉得还可以这样理解:如果是i*n会出现大于最小公倍数的情况
uq_38501086476 2年前 回复TA
如果2和4呢!怎么买9呢
lllllllll 2年前 回复TA
@化繁为简 我觉得最里层的break只能跳出内层循环,外层循环继续,会导致不是从头开始判断,无法整除,就会再次从头开始,是否可以加一个if语句进行判断是否找到,找到的话,跳出,方便下次从头寻找
lllllllll 2年前 回复TA
@化繁为简 for(int i=0;i<=m;i++){ 			for(int j=0;j<=n;j++){ 				if(p%m==0||p%n==0||i*n+j*m==p){ 					p--; 					z=0; 					break; 				} 			 			} 			if(z==0) break; 		}
lllllllll 2年前 回复TA
@化繁为简 如果n,m互换,需要两个位置对应互换,i<=n,那么i就要和m相乘
化繁为简 2年前 回复TA
在二层循环那里,如果吧n,m互换结果就不一样了,这是为啥?
eatingua 2年前 回复TA
是不是要先判断m和n那个比较大然后再循环嵌套比较好啊
单刷副本 3年前 回复TA
真不错!