作爲標題解釋這是一個程序找到1到20之間的lcm數字。我找到了一個算法來做到這一點,這裏是鏈接
http://www.cut-the-knot.org/Curriculum/Arithmetic/LCM.shtml 存在於網頁中的Java小程序可以解釋的算法更好C++程序計算1到20之間的數字(項目歐勒)
問題:我寫的代碼編譯器顯示沒有錯誤,但是當我運行程序發狂的代碼,我想可能會有一些無限loopig但我無法想象出我的生活。我使用turbo C++ 4.5所以基本上如果任何人都可以看看代碼,並幫助我,它會很好。在此先感謝
算法:
說,我們需要找到2,6,8-
LCM首先,我們發現至少系列,並添加到它的數量上面,即系列成爲
4,6,8
現在,我們再次找到了至少值和列添加到它的初使值即2
6,6,8
所以下一個迭代成爲
8,6,8
8,12,8
10,12,8
10,12 ,16
12,12,16
14,12,16
14,18,16
16,18,16
18,18,16
18,18,24
20,18,24
20 ,24,24
22,24,24
24,24,24
,你可以在一個點上看到所有的數字變成等於這是我們的LCM
#include<iostream.h>
/*function to check if all the elements of an array are equal*/
int equl(int a[20], int n)
{
int i=0;
while(n==1&&i<20)
{
if (a[i]==a[i+1])
n=1;
else
n=0;
i++;
}
return n;
}
/*function to calculate lcm and return that value to main function*/
int lcm()
{
int i,k,j,check=1,a[20],b[20];
/*loading both arrays with numbers from 1 to 20*/
for(i=0;i<20;i++)
{
a[i]=i+1;
b[i]=i+1;
}
check= equl(a,1);
/*actual implementation of the algorith*/
while(check==0)
{
k=a[0]; /*looks for the least value in the array*/
for(i=0;i<20;i++)
{
if(a[i+1]<k)
{
k=a[i+1]; /*find the least value*/
j=i+1; /*mark the position in array */
}
else
continue;
}
a[j]=k+b[j]; /*adding the least value with its corresponding number*/
check= equl(a,1);
}
return (a[0]);
/*at this point all numbers in the array must be same thus any value gives us the lcm*/
}
void main()
{
int l;
l=lcm();
cout<<l;
}
是不是像20年前發佈的turbo C++ 4.5? –
@JesseGood:我認爲法律之類的Turbo C++在印度是強制性的。 –
只是要提到它:該算法是非常可怕的。很難想象效率不高。該網站應該添加一個很大的警告,說它在實踐中不可用,並且僅用於說明目的(儘管我不寒而慄 - 想它應該說明什麼)。 –