学习笔记--2028

  1. OJ 2028 Lowest Common Multiple Plus
    链(http://acm.hdu.edu.cn/showproblem.php?pid=2028)

问题描述:求n个数的最小公倍数。

Input:输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。

Output:为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。

2.思路:
一看到题的第一想法就是用一位数组把要求计算的数据装进去,然后再对它进行遍历穷举。框架很容易就写出来了,就是算法部分不知道怎么操作怎么进行遍历。因为这题不像普通的只求两个数的最小公倍数,而是变化的数据个数,那我们熟悉的两个数的辗转相除法、辗转相减法、穷举法都没有用了。由于算法经验不是很足,想了很久一直没有想到什么解决的办法。通过去讨论区观摩学习了大佬的思路后,成功把问题解决了。

3.收获与总结:

在一开始提交的时候出现了Compilation Error,是最开始弄框架的时候数组的定义上出了问题,贪图方便直接让数组大小让n取代。
image.png

后来想到了求最大公倍数时,是从i=1开始遍历的,而i可以取到n这个值(如果简单地循环for(i=0;i
image.png

通过学习,知道了另一种更好用的计算最小公倍数的算法。
除了去讨论区,后来再去看了一下别人的笔记,发现他顺利的实现了我一开始想的方法,也明白了灵活运用循环的重要性,他的办法是在原本两个数的穷举法基础上套了
个循环每次单独求两个数的最小公倍数,然后再用求到的最小公倍数跟后面的数继续比较,周而复始。
4.经过学习后的源代码:

#include
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    { 
        int a=0;
        int num[100]; 
        for(int i=1;i<=n;i++){
        scanf("%d",&num[i]);
        if(a

5.运行结果:


image.png

你可能感兴趣的:(学习笔记--2028)