10.14作业

  1. 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)验证截图:

  1. 2.汉诺塔问题

(1) 设计思想:

 首先有三根柱子,可以认定为abc,要求是盘子必须是由上到下,由小到大串起来,并且每次移动只能移动一个盘子,而且是小盘子。要移动最下面的大盘子,就要先把上面的所有盘子移动;我们可以认为a为原柱,b为过渡柱,c为目标柱;如果只有一个盘子,可以直接从原柱移动到目标柱;如果有两个盘子,就要先移动小盘子,先将小盘子移动到b柱子,然后将大盘子移动到c柱子,然后将小盘子移动到c柱子,当有三个及以上的盘子的时候,可以由大到小定义为1234....因为最大的必须要在c的最下面,要把上面所有盘子先移到b,然后把最后一个盘子移动到c,然后把b柱子上的盘子再移动到c,此时原柱子就变为b,而a就变为过渡柱子,c就是目标柱子;这里要设置两个参数,一个函数用来移动当前最大的盘子,直接从ac,并且输出从哪移动到哪儿;第二个函数要有四个参数,一个整型,用来传递盘子个数,三个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. 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循环,用I1开始记录;设置一个变量,保存上一次相乘得到的结果,然后再用这个变量乘以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)验证截图:

 

posted @ 2017-10-13 19:45  南极没有北极熊  阅读(163)  评论(0编辑  收藏  举报