JAVA课后作业2

          程序设计思路:先计算N!,其中用递归计算。在分别计算N!,K!,(N-K)!.其中计算N!时直到N=1或0时结束,输出N。

         流程图:

                  源代码:

import java.util.Scanner;
public class Zuoye1_1 {

public static void main(String[] args) {
// TODO 自动生成的方法存根
int n,k,ans;
Scanner input=new Scanner(System.in);
System.out.print("输入n,k:");
n=input.nextInt();
k=input.nextInt();
ans=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));
System.out.print("答案:"+ans);
}
public static int jiecheng(int n) {
if(n==1||n==0)
return 1;
else
return n=jiecheng(n-1)*n;
}

}

          结果;

 

程序设计思:出杨辉三角的第n行的第m个的值等于该位置的元素的上一行的左右两个输的和,然后根据杨辉三角与组合数的关系即c(n,m)等于杨辉三角的第n-1的第m-1和第M个元素的值的和,根据这个来写出组合数的值。

流程图:

源代码:

import java.util.Scanner;
public class Zuoye1_2 {

public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner input=new Scanner(System.in);
System.out.print("输入n,k:");
int n=input.nextInt();
int k=input.nextInt();
int[][] a=new int[n+1][n+1];
for(int i=0;i<n+1;i++)
{

for(int j=0;j<=i;j++) {

if(j==0||j==i)
{
a[i][j]=1;
System.out.print(a[i][j]+" ");
}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
System.out.print(a[i][j]);
System.out.print(" ");
}
}
System.out.println();
}
if(n<2||k==1)
System.out.println("num=1");
else System.out.println("组合数="+a[n][k-1]+"="+a[n-1][k-2]+"+"+a[n-1][k-1]);

}

}

结果:

 

程序设计思路:输入n,m,两个数(来组成要求出的组合数)(n>m),如果m=1,则输出结果n,如果m!=1,则进入递归,运用公式,直到进行到n-m=1的时候,结束递归,输出结果。

流程图:类似上一题

源代码;

   import java.util.Scanner;

public static void main(String args[]) {
        Scanner sc=new Scanner(System.in);
        System.out.print("输入N值:");
        int n=sc.nextInt();
        System.out.print("输入K值:");
        int k=sc.nextInt();
        System.out.println("结果为:"+C(n,k));
    }
    public static int C(int n,int k)
    {
        if(n<0||k<0||n<k)
            return 0;
        if(n==k)
            return 1;
        if(k==1)
            return n;
        return C(n-1,k)+C(n-1,k-1);
    }
结果:

程序设计思路:

首先输入盘子的数量n,如果盘子的数量是1,则直接将编号为1的圆盘从A移到C,递归结束。

否则:

递归,将A上编号为1至n-1的圆盘移到B,C做辅助塔;

直接将编号为n的圆盘从A到C;

递归,将B上的编号为1至n-1的圆盘移到C,A做辅助塔。

流程图:

源代码:

import java.util.Scanner;
public class HanNuoTa {

public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
int n;
System.out.println("盘子数:");
n=sc.nextInt();
System.out.println("步骤数:"+new HanNuoTa().hanoiTower(n));
HanNuoTa HanoiTower = new HanNuoTa();
HanoiTower.move(n, 'A', 'B', 'C');

}

public int hanoiTower(int n) {
if(n==1) return 1;
else return hanoiTower(n-1)*2+1;
}

public void move(int n, char a, char b, char c) {
if (n == 1)
System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);
else {
move(n - 1, a, c, b);
System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);
move(n - 1, b, a, c);
}
}

}

结果:

 
程序思路:从键盘随意输入一个字符串,并将其赋值给一个数组,然后用递归进行,若i=j,泽肯定是递归,否则从数组的首元素与尾元素进行比较,若相等,则进行i++与j--,不断向中间靠拢,直到达到判断条件i>=j(i=j是输入的字符串的长度为偶数个,i>j是输入的字符串有奇数个),中间若有一次不符合判断,直接跳出递归,结束进程,输出不是回文字符串。(i是指的字符串的第一个元素的下标,j是指的字符串的最后一个元素的下标)
流程图:

源代码:
import java.util.Scanner;
 
public class huiwen
{
private static int n;
private static char a[];

    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        String str;
        str=sc.nextLine();
        n=str.length();
        a=str.toCharArray();
        if(huiwen(0))
        System.out.println(str+" 是回文数");
        else System.out.println(str+" 不是回文数");

    }


    public static boolean huiwen(int m){
         if(m>=n/2)
         return true;
         if(p[m]==a[n-1-m]) 
        return huiwen(m+1);
        else return false;  
    }         
    }

结果:

原文地址:https://www.cnblogs.com/xiaojq/p/7664571.html