タイトルが説明しているように、これは 1 から 20 までの数の lcm を見つけるためのプログラムです。これを行うアルゴリズムを見つけました
。
ウェブページには、アルゴリズムをよりよく説明する Java アプレットがあります。
問題: コード コンパイラはエラーを表示しないと書きましたが、コードを実行するとプログラムが暴走します。無限ループの可能性があると思いますが、私の人生では理解できません。私はターボ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;
}