每日java5-15

71.汉诺塔问题

import
java.util.Scanner;

public class HannoTower {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

System.out.println(“几个盘子:”);

int n=sc.nextInt();

hanno(n,“A”,“B”,“C”);

}

public static void hanno(int n,String a,String b,String c) {

if(n==1) {

move(n,a,c);

}else {

hanno(n-1,a,c,b);

move(n,a,c);

hanno(n-1,b,a,c);

}

}

public static void move(int n,String i,String j) {

System.out.println(“第”+n+“个圆盘,”+“从”+i+“移动到”+j);

}

}

71.倒叙输出一个正整数 n=12345, 输出54321

import
java.util.Scanner;

public class FB {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

System.out.println(“n:”);

int n=sc.nextInt();

f(n);

}

public static void f(int n) {

System.out.print(n%10+" ");

if(n>10) {

f(n/10);

}

}

}

73.求x的n次方:

import
java.util.Scanner;

public class FB {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

System.out.println(“数字n:”);

int n=sc.nextInt();

System.out.println(“次方m”);

int m=sc.nextInt();

System.out.println(f(n,m));

}

public static int f(int n,int m) {

if(m==0) {

return 1;

}else {

return n*f(n,m-1);

}

}

}

  1. 排列问题:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出abc、acb、bac、bca、cab和cba。

递归思想:假如针对abc的排列,可以分成:以a开头,加上bc的排列,以b开头,加上ac的排列,以c开头,加上ab的排列

import
java.util.Scanner;

public class PaiLie {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in) ;

System.out.println(“请输入一个字符串:”);

String s=sc.nextLine();

char[] chs=s.toCharArray();

per(chs,0);

}

public static void per(char[] chs,int i) {

if(i>chs.length)

return ;

if(i==chs.length-1) {

System.out.println(String.copyValueOf(chs));

}else {

for(int j=i;j<chs.length;j++) {

char temp = chs[j];

chs[j] = chs[i];

chs[i] = temp;

per(chs, i + 1);

temp = chs[j];

chs[j] = chs[i];

chs[i] = temp;

}

}

}

}

75.递归求从 m 个球中摸n个球的排列数

import java.util.Scanner;

public class PaiLie {

public static int f(int n,int m){

if(n<m)//从2个球中取出3个球

return 0;

if(n==m)//从2个球中取出2个球

return 1;

if(m==0)//从5个球中取出0个球

return 1;

return f(n-1,m-1)+f(n-1,m);

}

public static void main(String[] args) {

int k=f(10,3);

System.out.print(k);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值