0
点赞
收藏
分享

微信扫一扫

蓝桥杯2013省赛——核桃的数量(Java实现)

书坊尚 2022-04-13 阅读 74

问题描述:

小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:

  1. 各组的核桃数量必须相同
  2. 各组内必须能平分核桃(当然是不能打碎的)
  3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛)

程序从标准输入读入:
a b c
a,b,c都是正整数,表示每个组正在加班的人数,用空格分开(a,b,c<30)

输入
a b c三个正整数

输出
输出为一个正整数,代表每袋核桃的数量。

样例
输入复制
2 4 5
输出复制
20
输入复制
3 1 1
输出复制
3

代码:

import java.util.*;
public class Main{
public static void main(String[] args) {
		Scanner rd=new Scanner(System.in);
		int a=rd.nextInt();
		int b=rd.nextInt();
		int c=rd.nextInt();
		int i=1;
		while(i<=a*b*c)
		{
			if(i%a==0&&i%b==0&&i%c==0)
			{
				System.out.println(i);
				break;
			}	
			else
				i++;
		}
				
}
	}



这里涉及的是要求最大公约数和最小公倍数,结合下面两个例子来看就很简单了

求:最大公约数和最小公倍数的做法(如果有分数约分其实就是分子分母同时除以最大公约数)

         方法 : 求两个数的最大公约数,可以用辗转相除法,同样,也可以用辗转相减法(《九章算术》里也叫更相减损术)。

         一般情况下,辗转相除法的优势在于循环次数少,而辗转相减法的优势在于,对cpu 来说 做减法比除法更快。


         例子1:辗转相除法求最大公约数

    较大数除以较小数,若余数不为0,则余数作为除数,上次的除数作为被除数, 继续相除,直到余数为0,此时的除数即为最大公约数

          import java.util.*;     
            public class Main {
            public static void main(String[] args) {
	        Scanner rd = new Scanner(System.in);
	        int a=rd.nextInt();
	        int b=rd.nextInt();
	        int fan=0;          //定义余数
	        int a1=a;                  // 定义a1保存a的值
	        int b1=b;                        // 定义b1保存b的值
	        if(a<b) {                                                 //始终保持a比b大
		int max=a; 
		a=b;
		b=max;
	        }
	        while(a%b!=0) {        //运用辗转相除法求出最大公约数
		fan=a%b;                       //fan为余数,因为余数不为0
		a=b;                            //除数作为被除数,把b赋值给a
	                b=fan;              //余数作为除数,把fan赋值给b
	     }
	     System.out.println(b);                //输出最大公约数
	    System.out.print(a1*b1/b); //最小公倍数=输入的那两个值/最大公约数
}
}

例子2:辗转相减法求最大公约数

        有两整数a和b:
                 ① 若a>b,则a=a-b
                 ② 若a<b,则b=b-a
                 ③ 若a=b,则a(或b)即为两数的最大公约数
                 ④ 若a≠b,则再回去执行①
                 例如求27和15的最大公约数过程为:
                27-15=12( 15>12 ) 15-12=3( 12>3 )
               12-3=9( 9>3 ) 9-3=6( 6>3 )
                6-3=3( 3==3 )
                因此,3即为最大公约数
                
          例子:import java.util.*; 
               public class Main {
               public static void main(String[] args) {
	          Scanner rd = new Scanner(System.in);
	          int a=rd.nextInt();
	          int b=rd.nextInt();
	          int c=a*b;
	          while(a!=b) {
		      if(a>b) {
			    a=a-b;
		     }
		    else {
			  b=b-a;
		}
	}
	System.out.println(a);      //最大公约数
	System.out.println(c/a);    //最小公倍数
}
}
举报

相关推荐

0 条评论