这期文章继续给大家介绍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);
}
}
输出结果:
2、递归
在这里我们要知道: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);
}
}
}
运行结果:
(二)求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+"只小鸡");
}
}
}
}
}
运行结果:
|