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流控制符不是非常适应。我相信多练题多敲代码一定可以适应并了解这些的。