课后作业01
1
程序设计思想:
先输入需要求的组合数的m和k;然后利用阶乘直接求出结果即可;再写输出语句。
程序流程图:
源代码:
package lianxi;
import java.util.Scanner;
public class Zuheshu3
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
System.out.println("请输入n和k的值");
int n=input.nextInt();
int k=input.nextInt();
System.out.println("C"+"("+n+","+k+")"+"="+digui(n,k));
}
public static int digui(int n,int k)
{
if(n<k)
{
System.out.println("输入错误!");
}
if(k==1)
{
return 1;
}
if(n==k)
{
return 1;
}
return digui(k-1,n-1)+digui(k,n-1);
}
}
实验总结:
在传参部分遇到一些问题,没有定义参数类型。
2
程序设计思想:
先输入n和k;利用公式调用自己计算出结果。
程序流程图:
源代码:
package lianxi;
import java.util.Scanner;
public class Zuheshu2 {
public static void main(String args[]){ //定义主方法
System.out.println("输入m和k的值:"); //输入组合数
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int k=sc.nextInt();
int result=digui(n,k);
if (n < k || n <= 0 || k <= 0) {
System.out.println("n,k数据输入不合理");
}
System.out.println("C("+n+","+k+")="+result); //调用方法求组合数
}
public static int digui(int n,int k) //定义求组合数方法
{
if(k==0||k==n) //方法结束条件
return 1;
else
return digui(n-1,k)+digui(n-1,k-1); //杨辉三角计算组合数递归调用
}
}
3
程序设计思想:
通过对组合数递推公式的递归实现,输出组合数的数值。
程序流程图:
源代码:
package lianxi;
import java.util.Scanner;
public class Zuheshu3
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
System.out.println("请输入n和k的值");
int n=input.nextInt();
int k=input.nextInt();
System.out.println("C"+"("+n+","+k+")"+"="+digui(n,k));
}
public static int digui(int n,int k)
{
if(n<k)
{
System.out.println("输入错误!");
}
if(k==1)
{
return 1;
}
if(n==k)
{
return 1;
}
return digui(k-1,n-1)+digui(k,n-1);
}
}
实验结果截图:
课后作业02:
设计思想:
定义主函数,然后输入移动盘子的个数,再调用移动的函数,在移动的函数中写移动盘子的方法。
程序流程图:
源代码:
package lianxi;
import java.util.*;
public class Hanoi {
public void hanoi(int n,char one,char two,char three)
{
if(n==1)
move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x,char y)
{
System.out.println(x+"-->"+y+" ");
}
public static void main(String[] args) {
Hanoi H=new Hanoi();
int m;
System.out.println("input the number of diskes:");
Scanner sc=new Scanner(System.in);
m=sc.nextInt();
System.out.println("The steps to move"+m+"diskes:");
H.hanoi(m,'A','B','C');
}
}
实验结果截图:
实验总结:
在实验中比较麻烦的是移动盘子的方法,经过查阅书籍,了解到其方法,理解了设计思想,便解决了这个问题。
课后作业03
程序设计思想:
创建一个字符串数组,输入字符串,再创建一个字符串数组,利用reverse函数使字符串反过来存入新字符串数组中。然后判断两个字符串中每一个字符是否相等,最后看相等的字符是否相等,若等于字符串长度则等于字符串长度,若是则是回文字符串,若不是,则不是回文字符串。
程序流程图
源代码:
package lianxi;
import java.util.*;
public class Huiwen {
public static void main(String[] args) {
String str="";
System.out.println("请输入一个字符串:");
Scanner in=new Scanner(System.in);
str=in.nextLine();
StringBuffer sb=new StringBuffer(str);
sb.reverse();
int n=0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)==sb.charAt(i))
n++;
}
if(n==str.length())
System.out.println(str+"是回文!");
else
System.out.println(str+"不是回文!");
}
}
实验结果截图:
实验总结:
在开始使字符串倒置不知道用什么函数,后来经过百度了解到reverse函数,可以解决这个问题。