02-方法-作业

作业一

一、组合数n!计算Cn,k=n!/k!/(n-k)!

设计思想

(1)输入nk

(2)判断nk的大小

(3)判断nk是否为10

(4)计算nK!(n-k)!,最后计算除Cnk

流程图


源代码
import java.math.BigInteger;
import java.util.Scanner;


public class Zuoye01 {

 
 public static void main(String[] args) {
  System.out.print("请输入N:");
  
  Scanner scanner=new Scanner(System.in);
  int n=scanner.nextInt();
  
  System.out.print("请输入K:");
  Scanner reader=new Scanner(System.in);
  int k=scanner.nextInt();
  if(n<k){System.out.println("输入错误!");return;}
  else{
  long  number=0;
  number=calculateN(n)/(calculateN(k)*calculateN(n-k));
  System.out.println("Cnk  :"+number);
  }
  
 }
 
 
 public static long calculateN(int n) {
  if(n==1 || n==0){
   return 1;
  }
  
  return n*calculateN(n-1);
 }
}
程序截图

二、使用递推方法用杨辉三角计算

设计思想

1)输入nk

2)判断nk的大小

3)判断nk是否为10

4)计算nK!(n-k)!n+1-k)!(k-1)!

5number1=Cnk-1),number2=C(n,k)

6)计算出结果number1+number2

流程图

源代码

import java.math.BigInteger;

import java.util.Scanner;

public class Zuoye01 {

public static void main(String[] args) {

System.out.print("请输入N:");

Scanner scanner=new Scanner(System.in);

int n=scanner.nextInt();

System.out.print("请输入K:");

Scanner reader=new Scanner(System.in);

int k=scanner.nextInt();

if(n<k){System.out.println("输入错误!");return;}

else{

long  number1=0;

long number2=0;

number1=calculateN(n)/(calculateN(k-1)*calculateN(n+1-k));

number2=calculateN(n)/(calculateN(k)*calculateN(n-k));

System.out.println("C(n+1,k) = :"+(number1+number2));

}

}

public static long calculateN(int n) {

if(n==1 || n==0){

return 1;

}

return n*calculateN(n-1);

}

}

程序截图

二、使用递归的方法使用组合数递推公式计算

设计思想

(1)输入n

(2)判断n是不是负数

(3)递归计算出结果

源代码

//三、使用递归的方法使用组合数递推公式计算

//计算从1加到n

import java.math.BigInteger;

import java.util.Scanner;

public class Zuoye01 {

public static void main(String[] args) {

System.out.print("请输入N:");

Scanner scanner=new Scanner(System.in);

int n=scanner.nextInt();

if(n<0){System.out.println("输入错误!");return;}

else{

long  number1=0;

number1=n+calculateN(n-1);

System.out.println("1+2+...+"+n+":="+number1);

}

}

public static long calculateN(int n) {

if(n==1 || n==0){

return 1;

}

return n*calculateN(n-1);

}

}

程序截图

作业二

//汉诺塔

一、设计思想

1)用户输入个数

2)使用递归将An-1个移动到B上,C为过度

3)将A上最后一个移动到C

4)递归将Bn-1个移动到CA为过度

二、流程图

三、源代码

 

public class Hanoi {

    

    //使用递归法求解含有n个不同大小盘子的汉诺塔移动路径,参数n为盘子数,把A塔上盘子全部移动到C塔上,B为过渡塔

    public static void recursionHanoi(int n,char A,char B,char C){

        if(n == 1){

            System.out.print(A+"——>"+C+" ");    

        }

        else{

            recursionHanoi(n-1,A,C,B);         //使用递归先把A塔最上面的n-1个盘子移动到B塔上,C为过渡塔

            System.out.print(A+"——>"+C+" ");       //把A塔中底下最大的圆盘,移动到C塔上

            recursionHanoi(n-1,B,A,C);         //使用递归把B塔上n-1个盘子移动到C塔上,A为过渡塔

        }

    }

   public static void main(String[] args){

        System.out.println("请输入盘子总数n:");

        Scanner in = new Scanner(System.in);

        int n = in.nextInt();    

        recursionHanoi(n,'A','B','C');    

    }

}

四、程序截图

 

作业三

//判断字符是否是回文数

一、设计思想

(1)输入任意字符串

(2)递归判断字符第一个i和最后一个j是否相同

(3)i++j--,直到ij相等或i>j

(4)相同就输出true

二、流程图

一、源代码

import java.util.Scanner;

public class Zuoye03 {

public static void main(String args[]){

Scanner in = new Scanner(System.in);

String str=in.nextLine();

int i=0;

int j=str.length()-1;

System.out.println(str+"是否是回文数?"+Zuoye03.Palindrome(str, i, j));

}

public static boolean Palindrome(String s,int i,int j){

if(i>j){

return true;

}

else if(i==j){

return true;

}

else{

return (s.charAt(i)==s.charAt(j)&&Palindrome(s,i+1,j-1));  //递归

}

}

}

二、程序截图

 

原文地址:https://www.cnblogs.com/0710whh/p/7659871.html