思考问题1
编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数。
一 思路
1 定义主方法。
2 定义数组存放随机数。
3 确定种子。
4 用随机数公式生成随机数。
5 输出随机数。
二 程序流程图
三 源代码
public class random1000 {
public static void main(String[] args){ //主函数
int[] a=new int[7]; //定义数组存放随机数
//Random ran= new Random( System.currentTimeMillis() );
a[0]=2; //种子
System.out.println("生成的五个随机数是:");
for(int i=1;i<=5;i++){
a[i]=(7*a[i-1]+7)%1000; //用随机数公式生成随机数
System.out.println(a[i]); //输出
}
}
}
四 程序结果截图
思考问题2
JDK中System.out.println()方法
Print方法有很多重载的方法。当不传值时会调用println()空参数方法,这个方法里面做了换行操作,这个方法它是有打印数据的,只不过这个是一个换行符。
思考问题3
请看以下代码,你发现什么特殊之处了吗?
square()方法中方法名一样,参数类型不一样。
函数重载体现在(1)方法名相同;(2)参数的个数不同,参数类型不同,参数类型的顺序不同。
程序题
一 计算组合数
使用计算机计算组合数有三种方法:
(1)使用组合数公式利用n!来计算
(2)使用递推的方法用杨辉三角形计算
(3)使用递归的方法用组合数递推公式计算
1 用递归的方法用组合数递推公式计算
思路
1)定义主方法
2)输入组合数。
3)调用方法求组合数
4)定义求组合数的方法。
5)方法结束的条件。
6)用杨辉三角递归调用自己。
7)输出结果
流程图
源代码
import java.util.Scanner;
public class yanghui3 {
public static void main(String args[]){ //定义主方法
System.out.println("please input a zuheshu"); //输入组合数
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int k=in.nextInt();
if (n < k || n <= 0 || k <= 0) {
System.out.println("n,k数据输入不合理");
return;
}
System.out.println(digui(n,k)); //调用方法求组合数
}
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); //杨辉三角计算组合数递归调用
}
}
程序结果截图
2用组合数公式计算
思路
1)定义主方法
2)输入组合数。
3)调用方法求组合数
4)定义求组合数的方法。
5)方法结束的条件。
6)用杨辉三角递归调用自己。
7)输出结果
流程图
源代码
import java.io.*;
public class yanghui {
public static void main(String args[]) throws IOException //定义主方法
{
int n,k,a;
System.out.println("Please input n,k:"); //输入
BufferedReader read=new BufferedReader(new InputStreamReader(System.in)); //读入字符串
String aa=read.readLine();
String bb=read.readLine();
n=Integer.parseInt(aa); //类型转换为整型
k=Integer.parseInt(bb);
if (n < k || n <= 0 || k <= 0) {
System.out.println("n,k数据输入不合理");
return;
}
a=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));
System.out.println("组合数的值是:"+a); //输出
}
public static int jiecheng(int n){ //定义求阶乘的方法
if(n==1||n==0)
return 1;
else
return n*jiecheng(n-1); //递归调用
}
}
程序截图
二 汉诺塔题
递归编程汉诺塔问题,用程序实现
1 思路
1) 定义主方法
2) 输入盘子个数
3) 调用玩游戏的方法
4) 定义移动一个盘子的方法
5) 定义玩游戏的方法
2流程图
3源代码
import java.util.Scanner;
public class hannuota {
static int i=0;
public static void main(String[] args) { //定义主方法
// TODO Auto-generated method stub
int n;
System.out.println("Please input n:"); //输入盘子个数
Scanner in=new Scanner(System.in);
n=in.nextInt();
han(n,'a','b','c'); //调用玩游戏的方法
}
public static void move(char a,int n,char c){ //定义移动一个盘子的方法
i++;
System.out.println("第"+i+"步,"+"将第"+n+"个盘子从"+a+"移到"+c);
}
public static void han(int n,char a,char b,char c){ //定义玩游戏的方法
if(n==1) //盘子是一个的时候把第一个盘子从a移到c;
move(a,1,c);
else
{
han(n-1,a,c,b); //将a上1-n-1的移到b,c过渡
move(a,n,c); //将编号为n的从a移到c
han(n-1,b,a,c); //将b上1-n-1的移到a,c过渡
}
}
}
4 程序截图
三 回文数
1 思路
6) 定义主方法
7) 输入字符串
8) 调用玩游戏的方法
9) 定义移动一个盘子的方法
10) 定义玩游戏的方法
2流程图
3源代码
import java.util.Scanner;
public class huiwenshu {
public static void main(String[] args) { //定义主方法
// TODO Auto-generated method stub
String str="";
System.out.println("Please input a string:"); //输入字符串
Scanner in=new Scanner(System.in);
str=in.nextLine();
int len=str.length(); //求字符串长度
System.out.println("true is palindrome,false is not:"+pan(str,len-1,0,len)); }
public static boolean pan(String str,int h,int z,int len){ //定义判断是否是回文数的方法
if(len==0||len==1) //函数结束条件
return true;
if(str.charAt(h)!=str.charAt(z)) //对应的不相等就不是回文数
return false;
return pan(str,h-1,z+1,len-2); //递归调用
}
}
4 程序结果截图