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;
}
}