B、 有若干根长短不一的木材,工人需要将这些木材分割成一样长的小段,编写一个算法计算最少能分割出多少段。
输入:第一行N,表示木材的数量
第二行N个整数代表N个木材的长度
输出:分割后的段数
样例:
Input: 3
3 6 9
Output: 6
这道题本质上是求多个数的最大公约数,先求两个的,再依次求下去。代码如下:(用List有点问题)

// Author:滕艳波
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public  class Main
{
    public static void main(String[] args)
    {
        Main mi = new Main();
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext())
        {
            int num = sc.nextInt();
            if (num < 2)
            {
                System.out.println("您输入的数据非法");
            }
        //  int len1 = sc.nextInt();
            //int len2 = sc.nextInt();
            //int result = mi.greatestCommon(len1, len2);
            int[] arr = new int[num];
            for (int i = 0;i < num;i++)
            {
                arr[i] = sc.nextInt();
            }
            int result = mi.greatestCommon(arr[0],arr[1]);
            //System.out.println(result);
            for (int i =2;i < num;i++)
            {
                result = mi.greatestCommon(result,arr[i]);
            }
            //System.out.println(result);
            int sum = 0;
            for (int i = 0;i < num;i++)
            {
                sum += (arr[i]/result);
            }

            System.out.println(sum);
        }
        //greatestCommon(100,22);
    }
    public int max(int a,int b)
    {
        if (a >=b ) return a;
        else return b;
    }
    public int min(int a,int b)
    {
        if (a < b) return a;
        else return b;
    }
    public int greatestCommon(int a,int b)
    {

        int p = 0;
        int q = 0;
        p = max(a,b);
    //  System.out.println(p);
        q = min(a,b);
        //System.out.println(q);
        int t = 0;
        while ((t=p % q )!= 0)
        {
            p=q;
            //System.out.println(p);
            q = t;
            //System.out.println(q);
        }
        //System.out.println(q);
        return q;
    }
}

求n个数的最小公倍数。思路是:取n个数中的最大者,如果能整除所有的数,则此最大的数即为最小公倍数,否则将最大值加一,直到能整除所有的数。
代码如下:

//Author:滕艳波
import java.util.Scanner;
public class JustTest {
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext())
        {
            int num = sc.nextInt();
            int[] arr = new int[num];
            for (int i = 0;i < num;i++)
            {
                arr[i] = sc.nextInt();
            }
            int result = max(arr,num);
            System.out.println(result);
        }
    }
    public static int max(int[] arr,int num)
    {
        int maxValue = 0;
        for (int i =0;i < num;i++)
        {
            if (arr[i] > maxValue)
                maxValue = arr[i];
        }

            for (int i = 0;i < num;)
            {
                if (maxValue % arr[i] != 0)
                {
                    maxValue += 1;
                    i=0;
                }
                else
                {
                    i++;
                }
            }
            return maxValue;

        //return  1;
    }

}