这期文章继续给大家介绍Java简单的算法!
一、阶乘的相关的算法 (一)求任意一个数的阶乘在这里我能想到的方法有两种:for循环和递归;
1、for循环代码如下:
public class Demo08 { public static void main(String[] args) { int sum=1; Scanner sc=new Scanner(System.in); System.out.println("请输入一个数:"); int a=sc.nextInt(); for(int i=1;i<=a;i++){ sum=sum*i; } System.out.println(a+"!="+sum); }}
输出结果:
在这里我们要知道:n!=n*(n-1)!
有了这个公式,我们就可以利用递归实现阶乘:
代码如下:
import java.util.Scanner;public class Demo09 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入一个数:"); int n=sc.nextInt(); System.out.println(n+"!="+Recursion(n)); } public static int Recursion(int a){ if(a==0){ return 1; } else{ return a*Recursion(a-1); } }}
运行结果:
在这里 我就以for循环为例:
代码如下:
import java.util.Scanner;public class Demo10 { public static void main(String[] args) { int n=1,sum=0; Scanner sc=new Scanner(System.in); System.out.println("请输入一个数:"); int a=sc.nextInt(); for(int i=1;i<=a;i++){ n=n*i; sum=sum+n; } System.out.println("1~"+a+"的阶乘和是:"+sum); }}
运行结果:
任意给定一个三位数,试编程求解其各位数对应的阶乘之和。
(如给定一个自然数 123 ,求 1! +2!+3!)
解:应明确,先分离各个位数,在分别求阶乘,最后求和!
代码如下 :
import java.util.Scanner;public class Demo11 { public static void main(String[] args) { int b1,b2,b3; int sum=0; Scanner sc=new Scanner(System.in); System.out.println("请输入一个数:"); int b=sc.nextInt(); if(b<1000&&b>99){ b1=b/100; b2=b/10%10; b3=b%10; sum=Recursion(b1)+Recursion(b2)+Recursion(b3); System.out.println(b+"的各个位数的阶乘和是:"+sum); } else{ System.out.println("输入的数不是一个三位数!!!"); } } public static int Recursion(int a){ if(a==0){ return 1; } else{ return a*Recursion(a-1); } }}
运行结果:
”百钱百鸡问题”:已知公鸡每只 3 元,母鸡每只 5 元;每 3 只小鸡 1 元,现需用 100 元买 100 只鸡,问每种鸡应各买多少只。
解:这里我们知道,母鸡最多买20只,公鸡最多买33只(小数部分舍掉)
如果公鸡母鸡的数量确定了,小鸡的数量自然也就确定了,所以,我们秩序嵌套两重循环即可。
代码如下:
//百钱百鸡public class Demo02 { public static void main(String[] args) { for(int i=0;i<=20;i++){ for(int j=0;j<=33;j++){ int k=100-i-j; if((5*i)+(3*j)+(k/3)==100&&k%3==0){ System.out.println("应买"+i+"只母鸡;"+j+"只公鸡;"+k+"只小鸡"); } } } }}
运行结果: