hdu 1019 Least Common Multiple

题目意思就是给你 一组32位的整数,让你求所给的这组数的所有数的最小公倍数。解题大致过程就是先对给出的这组数{a1,a2,a3...am}从小到大进行排序得到{b1,b2...bm},然后先求出b1和b2的最小公倍数,再以此最小公倍数和第三个数b3求出它们之间的最小公倍数,一直这样下去到bm,就能得到最终所有数的最小公倍数。

附代码

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <math.h>
 4 #include <stdlib.h>
 5 
 6 int a[1000001];
 7 int cmp(const void *a, const void *b)
 8 {
 9     return *(int *) a - *(int *)b;
10 }
11 int main()
12 {
13     int n;
14     freopen("in", "r", stdin);
15 
16     while(scanf("%d", &n) != EOF)
17     {
18         int m;
19 
20         while(n --)
21         {
22             int i, j;
23 
24             scanf("%d", &m);
25             for(i = 0; i < m; ++ i)
26             scanf("%d", &a[i]);
27 
28             qsort(a, m, sizeof(int), cmp);
29 
30             for(i = 0; i < m - 1; ++ i)
31             {
32                 if(a[i] > a[i + 1])
33                 {
34                     int t = a[i];
35                     a[i] = a[i + 1];
36                     a[i + 1] = t;
37                 }
38 
39                 for(j = a[i + 1];; j += a[i + 1])
40                 {
41                     if(j % a[i + 1] == 0 && j % a[i] == 0)
42                     {
43                         a[i + 1] = j;
44                         break;
45                     }
46                 }
47             }
48 
49             printf("%d\n", a[m - 1]);
50         }
51     }
52     return 0;
53 }
View Code

 

posted @ 2015-04-28 16:53  shihuai_2  阅读(153)  评论(0编辑  收藏  举报