2019-05-08

2028题链接p://acm.hdu.edu.cn/showproblem.php?pid=2028

思路:求最小公倍数,就是要先求最大公约数,数学上有很多方法,比如用辗转相除法或者根项相减法,经过考虑之后我是用辗转相除法,因为这种方法减省了大量的运算时间。我这里构造了一个函数。代码如下:

#include

int f(int i,int j)

{  

        inta,b;  

        inttemp1 = i,temp2 = j; 

        if(i

        {     

                 a=i;   

                 i=j;     

                 j=a;  

        }  

        while(j!=0)  //辗转相除法求出最大公约数

        {     

                 b=i%j;   

                 i=j;      //最后一次求余让b=0后,i就是最大公约数了。

                 j=b;   

        }  

        return temp1 / i * temp2;

}

int main()

{  

        intn,i,t,a[100]; 

        while(~scanf("%d",&n))

        {    

                 if(n==0)

                         continue;

                 t=1;   

                 for(i=0;i

                 {          

                         scanf("%d",&a[i]);   

                         t=f(a[i],t);     

                 }     

                 printf("%d\n",t);  

        } 

        return0;

}


我个人认为这段代码的核心就是12-17行。因为我在想这里的时候花了很多时间。

运行结果:


本周总结:这周刷题量比较少,我这几晚的学习基本上都用在学习C++,

以下是我自己用C++打的一道求三角形的题:

#include

#include                     //使用数学函数时要包含头文件cmath

#include          //使用I/O流控制符要包含头文件iomanip

using namespace std;

int main()

{

        doublea,b,c;

        cout<<"pleaseenter a,b,c:";

        cin>>a>>b>>c;

        if(a+b>c&&b+c>a&&c+a>b)

        {

                 doubles,area;

                 s=(a+b+c)/2;

                 area=sqrt(s*(s-a)*(s-b)*(s-c));//这里用海伦公式求三角形面积

                 cout<

                 cout<<"area="<

        }

        elsecout<<"it is not a trilateral!"<

        return0;

}


目前对头文件和I/O流控制符不是非常适应。我相信多练题多敲代码一定可以适应并了解这些的。

你可能感兴趣的:(2019-05-08)