博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
02课后作业
阅读量:6946 次
发布时间:2019-06-27

本文共 3060 字,大约阅读时间需要 10 分钟。

1、使用计算机计算组合数

使用组合数公式利用n!来计算

(1)设计思想:设计功能函数fac()采用循环的方式,计算n!。在主类里输入所要计算的组合数的值,调用函数fac(),利用组合数计算公式计算出组合数。

(2)程序流程图:

(3)源程序代码:

import java.util.Scanner;

public class Cnumber {

 

public static void main(String[] args) {

long k,n,s,s1=1,s2=1,s3=1;

Scanner scan=new Scanner(System.in);

System.out.println("请输入:");

n=scan.nextInt();

k=scan.nextInt();

s=fac(s1,n)/(fac(s2,k)*fac(s3,(n-k)));//调用fac()函数

System.out.println("c(n,k)="+s);

}

   public static long fac(long s,long n)//使用循环的方法计算n!

    {

   for(int i=1;i<=n;i++)

   {

   s=s*i;

   }

   return s;

}

}

(4)结果截图:

使用递推的方法用杨辉三角形计算

(1)设计思想:输入c(n,k),设计函数sum()采用递推的方法计算n!,在主类里调用。递推“从前至后”。

(2)程序流程图:

 

(3)源程序代码:

import java.util.Scanner;

public class Cnumber3 {

 

public static void main(String[] args) {

long k,n,s,s1=1,s2=1,s3=1;

Scanner scan=new Scanner(System.in);

System.out.println("请输入组合数c(n,k):");

n=scan.nextInt();

k=scan.nextInt();

System.out.println("c(n,k)="+sum(n,k));

 

}

static long sum(long n,long k)//递推

{

long s=1,s1=1,s2=1;

for(long i=1;i<=n;i++)

{

s=s*i;

}

for(long i=1;i<=k;i++)

{

s1=s1*i;

}

for(long i=1;i<=n-k;i++)

{

s2=s2*i;

}

return s/(s1*s2);

}

 

}

 (4)结果截图:

使用递归的方法用组合数递推公式计算

(1)设计思想:设计递归函数计算阶乘,在主类里调用。

2)程序流程图:

(3)源程序代码:

import java.util.Scblic class Cnumber2 {

 

public static void main(String[] args) {

long k,n,s,s1=1,s2=1,s3=1;

Scanner scan=new Scanner(System.in);

System.out.println("递推公式:c(n,k)=c(n-1,k-1)+c(n-1,k)");

System.out.println("请输入:");

n=scan.nextInt();

k=scan.nextInt();

s=fac(n-1)/(fac(k-1)*fac(n-k-2))+fac(n-1)/(fac(k)*fac(n-1-k));

System.out.println("c(n,k)="+s);

 

}

public static long fac(long n)//递归函数

{

long f=1;

if(n<0)

System.out.println("输入错误!");

 

    if(n==0||n==1)

f=1;

else f=fac(n-1)*n;

return f;

}

}

(4)结果截图:

2、递归编程解决汉诺塔问题。用Java实现

(1)设计思想:输入盘子个数,设计两个函数move1()move()move1()函数实现从一个底座指向另一个底座的功能,move()为递归函数,在move()里调用move1(),在主类里调用move()

(2)程序流程图:

(3)源程序代码:

import java.util.Scanner;

public class Hannuota {

 

public static void main(String[] args) {

int peg1=1;//三个底座定义为1,2,3

int peg2=2;

int peg3=3;

int n;//盘子的个数

Scanner scan=new Scanner(System.in);

System.out.println("input the number of diskes:");

n=scan.nextInt();

System.out.println("The step to move"+n+"diskes");

move(n,peg1,peg2,peg3);

}

public static void move(int n,int peg1,int peg2,int peg3)

{//将n个盘子借助peg2,移到peg3

if(n==1)

move1(peg1,peg3);

else

{

move(n-1,peg1,peg3,peg2);

move1(peg1,peg3);

move(n-1,peg2,peg1,peg3);

}

}

public static void move1(int p1,int p2)

{

System.out.println(p1+"->"+p2);

}

 

}

}

(4)结果截图:

3、使用递归方式判断某个字串是否是回文数

1)设计思想:输入字符串定义ij来比较前后位置的字符是否相同,设计递归函数judge(),在主类里调用。

2)程序流程图:

 

(3)源程序代码:

import java.util.Scanner;

 

public class Huiwenshu

{

public static void main(String[] args)

{

String str=" ";

System.out.println("请输入要判断的字符串(true表示回文字串,false表示非回文字串)");

Scanner input=new Scanner(System.in);

str=input.next();

int j=str.length()-1;

int i=0;

System.out.println(Huiwenshu.judge(str,i,j));

 

}

public static boolean judge(String s,int i,int j)

{

if(i>j)

System.out.println("错误!");

if(i==j)

return true;

else

 

return(s.charAt(i)==s.charAt(j)) && judge(s,i+1,j-1);

 

}

}

4)结果截图:

 

转载于:https://www.cnblogs.com/xxlya/p/7664135.html

你可能感兴趣的文章
re模块 正则表达式
查看>>
06-标准文档流,块级元素和行内元素,浮动,margin的用法
查看>>
tomcat的默认路径ROOT怎么改变,我想设置tomcat的默认路径,怎么设置?
查看>>
sqlite使用手册(转)
查看>>
学习:深度和广度之谈
查看>>
leetcode495
查看>>
用分解的方式学算法002——插入排序
查看>>
剑指Offer 16 数值的整数次方
查看>>
Intent 调用系统中经常用到的组件
查看>>
011PHP基础知识——运算符(四)
查看>>
SpringBoot集成WebSocket【基于STOMP协议】进行点对点[一对一]和广播[一对多]实时推送...
查看>>
20060308: WOW角色不见了
查看>>
iOS 横屏模态进入下一级界面, 竖屏退出
查看>>
乱搞-模拟退火
查看>>
AC日记——滑动窗口 洛谷 P1886
查看>>
Android监听手机网络变化
查看>>
ES6基础-解构赋值
查看>>
html转义字符
查看>>
C++ 简单的日志类
查看>>
Linux /proc目录详解
查看>>