一、
1。(1)设计思想:
先利用递归写出求阶乘的函数,然后调用这个函数求出组合数。
(2)程序流程图:
(3)程序源码:
1 //信1605-1 康旭阳 20163608 2 import java.util.Scanner; 3 public class text1_1 { 4 public static void main (String[] args){ 5 int k=0,n=0,C=0,d=0; 6 Scanner input=new Scanner (System.in); 7 System.out.println("请分别输入n和k:"); 8 n=input.nextInt(); 9 k=input.nextInt(); 10 if (k>n){ 11 System.out.println("输入错误!"); 12 return; 13 } 14 C=jiecheng(n)/(jiecheng(k)*(jiecheng(n-k))); 15 d=jiecheng(k)*(jiecheng(n-k)); 16 C=jiecheng(n)/d; 17 System.out.println("该组合数的结果为:"+C); 18 } 19 public static int jiecheng(int a){ 20 int b=0; 21 if (a==1) 22 b=1; 23 else 24 b=a*jiecheng(a-1); 25 return b; 26 } 27 }
(4)结果截图:
2。(1)设计思想:
定义一个二维数组Y存储杨辉三角形,循环赋值构造杨辉三角形:Y[i][0] = 1,Y[i][i] = 1,(i = 0,1,2……n),其余每个Y[i][j] = Y[i - 1][j - 1] + Y[i - 1][j]。则C(n,k)就等于Y[n][k]。
(2)程序流程图:
(3)程序源码:
1 //信1605-1 康旭阳 20163608 2 import java.util.Scanner; 3 public class text1_2 { 4 public static void main(String[] args){ 5 System.out.println("请分别输入n和k:"); 6 Scanner input=new Scanner(System.in); 7 int n=input.nextInt(); 8 int k=input.nextInt(); 9 System.out.println("该组合数的结果为:"+T(n,k)); 10 } 11 public static int T(int n,int k){ 12 int[][]Y=new int [n+1][n+1]; 13 Y[0][0]=1; 14 for(int i=0;i<n+1;i++) 15 { 16 Y[i][0]=1; 17 Y[i][i]=1; 18 } 19 for (int i=2;i<n+1;i++) 20 { 21 for(int j=1;j<i;j++) 22 { 23 Y[i][j]=Y[i-1][j-1]+Y[i-1][j]; 24 } 25 } 26 return Y[n][k]; 27 } 28 }
(4)结果截图:
3。(1)设计思路:
按照所给公式用递推的方式表示,然后输出n和k求值。
(2)程序流程图:
(3)程序源码:
1 //信1605-1 康旭阳 20163608 2 import java.util.Scanner; 3 public class text1_3 { 4 public static void main (String[] args){ 5 Scanner input=new Scanner(System.in); 6 System.out.println("请分别输入n和k"); 7 int n=input.nextInt(); 8 int k=input.nextInt(); 9 if (k>(n+1)){ 10 System.out.println("输入错误!"); 11 return; 12 } 13 else 14 System.out.println("该组合数的结果为:"+zuheshu(n,k)); 15 } 16 public static int zuheshu(int n,int k){ 17 int C=0; 18 if (k==0||(n+1)==k) 19 C=1; 20 else 21 C=zuheshu(n-1,k-1)+zuheshu(n-1,k); 22 return C; 23 } 24 25 }
(4)结果截图:
二、
(1)设计思路:
当盘子的个数为1时,直接从柱子1移动到柱子3;
n>1时,可将其分为三个步骤:
(1)将上面n-1个盘子从柱子1移到柱子2上。
(2)将剩下的一个盘子从柱子1座移到柱子3上。
(3)将柱子2上的n-1个盘子从柱子2移动到柱子3上。
(2)程序流程图:
(3)程序源码:
1 //信1605-1 康旭阳 20163608 2 import java.util.Scanner; 3 public class text2 { 4 public static void main (String[] srgs){ 5 Scanner input=new Scanner (System.in); 6 System.out.println("请输入塔的层数:"); 7 int num=input.nextInt(); 8 final int zhuzi1=1,zhuzi2=2,zhuzi3=3; 9 yidong(num,zhuzi1,zhuzi3,zhuzi2); 10 } 11 public static void yidong(int num,int zhuzi1,int zhuzi3,int zhuzi2){ 12 if(num==1) 13 System.out.println(zhuzi1+"移动至"+zhuzi3); 14 else{ 15 yidong(num-1,zhuzi1,zhuzi2,zhuzi3); 16 System.out.println(zhuzi1+"移动至"+zhuzi3); 17 yidong(num-1,zhuzi2,zhuzi3,zhuzi1); 18 } 19 } 20 }
(4)结果截图:
三、
(1)设计思路:
首先将字符串的第一个和最后一个字符做比较,然后利用递归,再将剩下的字符串的第一个和最后一个字符作比较,直到字符串长度为1或者0。
(2)程序流程图:
(3)程序源码:
1 //信1605-1 康旭阳 20163608 2 import java.util.Scanner; 3 public class text3 { 4 public static void main(String[] args){ 5 Scanner input=new Scanner (System.in); 6 System.out.println("请输入一个字符串:"); 7 String zfc=input.next(); 8 boolean a=huiwen(zfc); 9 if (a==true) 10 System.out.println("该字符串回文。"); 11 else 12 System.out.println("该字符串不回文。"); 13 } 14 public static boolean huiwen(String zfc){ 15 int m=zfc.length(); 16 char a=zfc.charAt(0); 17 char b=zfc.charAt(m-1); 18 if(m==0||m==1) 19 return true; 20 if(a==b) 21 return huiwen(zfc.substring(1,m-1)); 22 else 23 return false; 24 } 25 26 }
(4)结果截图: