求N个数的最小公倍数我是这样想的:以6 3 9为例,将它们放在二维数组中每行的首地址,然后让其中最小的数安如下规律扩大,请竖着看.6 不变 12 不变 18 不变3 6 9 12 15 189 不变 不变 18 不变 不变

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/05 23:18:03
求N个数的最小公倍数我是这样想的:以6 3 9为例,将它们放在二维数组中每行的首地址,然后让其中最小的数安如下规律扩大,请竖着看.6 不变 12 不变 18 不变3 6 9 12 15 189 不变 不变 18 不变 不变

求N个数的最小公倍数我是这样想的:以6 3 9为例,将它们放在二维数组中每行的首地址,然后让其中最小的数安如下规律扩大,请竖着看.6 不变 12 不变 18 不变3 6 9 12 15 189 不变 不变 18 不变 不变
求N个数的最小公倍数
我是这样想的:以6 3 9为例,将它们放在二维数组中每行的首地址,然后让其中最小的数安如下规律扩大,请竖着看.
6 不变 12 不变 18 不变
3 6 9 12 15 18
9 不变 不变 18 不变 不变
也就是说让最小的数加上它的初值,这样求最小公倍数是就不用求最大公约数了,我编的程序如下,但是却陷入死循环,有看到的朋友请解释一下.
main()
{
int N,i,j,k,m=0,n=0,c=0,min;
long a[10][10];
for(N=0;;N++) /输入数据/
{
scanf("%ld",a[N][0]); /存入首地址/
if(a[N][0]==0) /以0结束输入/
break;
}
min=a[0][0];
for(j=0;;j++)
{
for(i=0;ia[i][j])
{
min=a[i][j];
m=i; /标记最小值坐标/
n=j;
}
for(k=0;k

求N个数的最小公倍数我是这样想的:以6 3 9为例,将它们放在二维数组中每行的首地址,然后让其中最小的数安如下规律扩大,请竖着看.6 不变 12 不变 18 不变3 6 9 12 15 189 不变 不变 18 不变 不变
你这程序最大问题貌似是这样的:
当前最小数是不唯一的,而你的保存下标只能保存一组下标.
再说个大问题,数组个数问题,开N,N的数组显然不够,比如说2和10001最小公倍数是20002,这个2要加10001次,这数组就上万了,再多加两个数3和5,这四个数的最小公倍数就是300030了,这个2就要加150015次了,这数组就得开15万,再加几个数呢……太恐怖了.
当然这可以用链表解决,但是时间效率上就成问题了……
其实你想过没,中间结果是没有必要保存,只与最近一次结果,因此数组实际有用的只有两位,第一位保存原数,第二位保存加到当前的结果,
按以上思路大概写了段程序如下:
经测试应该是没什么问题的,只要你的输入数据保证最小公倍数在long的范围之内.
#include
#define N 10//允许输入数据的最大个数
void main()
{
bool flag;//标记算法是否已经结束
int total,i,min;//分别为输入数据的个数,循环变量,当前最小值
long a[N][2];

total=0;
do
{
scanf("%ld",&a[total][0]);
a[total][1]=a[total][0];
total++;
}while(a[total-1][0]!=0&&total