10.14作业
- 1.使用递归方式判断某个字串是否是回文
(1)设计思想:回文就是正着读和反着读都是一样的,要判断一个字符串是否回文,先要把字符串分解成每个字符,如果只有一个字符,可以简单的判定;当字符个数超过一个的时候,就要进行比较,第一个和最后一个比较,这里定义一个整数,用来记录,开头的加一,末尾的减一,比较两个字符串是否相同,这就是递归函数了;
(2)程序流程图:
(3)程序源代码:
import java.util.Scanner;
public class Huiwen
{
public static boolean haha(String str,int start,int end)
{
if(start==end)
{
return true;
}
else{
if(str.charAt(start)!=str.charAt(end))
{
return false;
}
if(str.charAt(start)==str.charAt(end))
{
return true;
}
return haha( str,start+1, end-1);
}
}
public static void main(String[] args)
{
// TODO 自动生成的方法存根
Scanner input= new Scanner(System.in);
String s;
s=input.next();
int start=0,end=s.length();
if( haha(s, 0, s.length()-1))
{
System.out.println("是");
}
else
System.out.println("不是");
}}
(4)验证截图:
- 2.汉诺塔问题
(1) 设计思想:
首先有三根柱子,可以认定为abc,要求是盘子必须是由上到下,由小到大串起来,并且每次移动只能移动一个盘子,而且是小盘子。要移动最下面的大盘子,就要先把上面的所有盘子移动;我们可以认为a为原柱,b为过渡柱,c为目标柱;如果只有一个盘子,可以直接从原柱移动到目标柱;如果有两个盘子,就要先移动小盘子,先将小盘子移动到b柱子,然后将大盘子移动到c柱子,然后将小盘子移动到c柱子,当有三个及以上的盘子的时候,可以由大到小定义为1234....因为最大的必须要在c的最下面,要把上面所有盘子先移到b,然后把最后一个盘子移动到c,然后把b柱子上的盘子再移动到c,此时原柱子就变为b,而a就变为过渡柱子,c就是目标柱子;这里要设置两个参数,一个函数用来移动当前最大的盘子,直接从a到c,并且输出从哪移动到哪儿;第二个函数要有四个参数,一个整型,用来传递盘子个数,三个char类型,用来传递柱子的名字;首先判断是否为n,也就是盘子的数量,是否为一。
(2)程序流程图:
(3)程序代码:
import java.util.Scanner;
public class Hannuota {
public static void six(char q, char w)
{
System.out.println(q+"----->"+w);//????????????输出传递的参数
}
public static void niu(int n,char a,char b,char c)
{
if(n==1)
{
six(a,c);
}
else
{
niu( n-1, a, c, b);
six(a,c);
niu( n-1, b, a, c);
}
}
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int num;
System.out.println("请输入要移动盘子的数量");
num=input.nextInt();
niu( num,'A', 'B','C');
}
}
(4)验证截图:
- 1使用n的阶乘计算组合数
(1)设计思想:主要就是求n的阶乘,然后再根据公式看看需要几个变量,对变量进行赋值。
(2)程序代码:
import java.util.Scanner;
public class Cnjisuan {
public static int fact (int n)
{
if (n==1)
{
return 1;
}
else
{
return n*fact(n-1);
}
}
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
int n,k,a,b,c,d;
System.out.println("请输入n和k的值:");
n=input.nextInt();
k=input.nextInt();
a=fact(n);
b=fact(k);
c=fact(n-k);
d=a/(b*c);
System.out.println("最后的结果是:"+d);
}
}
(3)验证截图:
3.2.使用递推的方法用杨辉三角计算:
(1)设计思想:也是求阶乘,例如,求5的阶乘,要先算1*2,然后把1*2的结果再乘以3;然后再把1*2*3的结果乘以4,每次×的数字都比上一次×的数字大一,这里可以用一个for循环,用I从1开始记录;设置一个变量,保存上一次相乘得到的结果,然后再用这个变量乘以i,此时的i会比上一次的i大一。这个程序主要是利用递推法求阶乘,其余的算法和上面一个相同。
(2)程序代码:
import java.util.Scanner;
public class Ditui {
public static int fact (int n)
{ int a,b,c=1;
for(int i=1;i<=n;i++)
{
b=i;
a=b;
c=c*b;
}
return c;
}
public static void main(String[] args)
{
// TODO 自动生成的方法存根
Scanner input= new Scanner(System.in);
int a,b;
System.out.println("你要求几的阶乘");
a= input.nextInt();
b=fact(a);
System.out.println(b);
}
(3)验证截图: