概述
HNUCM-OJ 递归(java)
- 汉诺塔
- 全排列
- 九数组分数
- 斐波那契数
- 蜂房
- 数字求和
- XP的楼梯
- 字符统计
- 数的划分
汉诺塔
/**
汉诺塔
*/
import java.util.Scanner;
public class Main {
static int step=0;
static void move(int n, char a, char b) {
System.out.println("move "+(++step)+" from "+a+" to "+b);
}
public static void hanoi(int n,char a,char b ,char c){
if(n>0){
hanoi(n-1,a,c,b);
move(n,a,c);
hanoi(n-1,b,a,c);
}
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();//行
hanoi(n,'A','B','C');
}
}
全排列
/**
全排列
*/
import java.util.Scanner;
public class Main {
public static void perm(int list[], int k,int n) {
int i,t;
if(k==n) {
for(i=0; i<=n; i++) {
System.out.print(list[i]+" ");
}
System.out.println();
}
for(i=k; i<=n; i++){
{t=list[k]; list[k]=list[i]; list[i]=t;}
perm(list,k+1,n);
{t=list[i]; list[i]=list[k]; list[k]=t;}
}
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n=cin.nextInt();
int arr[]=new int[n];
for(int i=0;i<arr.length;i++){
arr[i]=cin.nextInt();
}
perm(arr,0,arr.length-1);
}
}
九数组分数
题目描述
1, 2, 3…9 这九个数字组成一个分数,其值恰好为1/3,要求每个数字出现且只能出现一次,如何组合?编写程序输出所有的组合。
输入
无
输出
输出所有的结果,如果有多个,每条结果占一行。
结果的格式 : xxxx/xxxxx ,按照分子从小到大的顺序输出。
import java.util.Scanner;
public class Main {
public static void test(int[] Array) {//首先判定份为1的占四位数,份为5的占五位数
int a = Array[0]*1000+Array[1]*100+Array[2]*10+Array[3];//份为1的占四位数
int b = Array[4]*10000+Array[5]*1000+Array[6]*100+Array[7]*10+Array[8];//份为5的占五位数
if(a*3==b) { //满足条件
System.out.println(a+"/"+b);
}
}
public static void perm(int[] a,int k,int n){
int i;
int t;
if(k==n){
test(a);
}
for(i=n;i>=k;i--){
{t=a[k];a[k]=a[i];a[i]=t;}
perm(a,k+1,n);
{t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int Array[]= {1,2,3,4,5,6,7,8,9};
int len=Array.length;
perm(Array,0,len-1);
System.out.println(" ");
}
}
超级青蛙
题目描述
一只超级青蛙一次可以跳上1级台阶,也可以跳上2级……它也能够跳上n级台阶。请问,该青蛙跳上一个n级的台阶总共有多少种跳法?
输入
输入一个正整数n表示台阶的数量。
输出
输出总的跳法数。
样例输入 Copy
1
2
样例输出 Copy
1
2
import java.util.Scanner;
public class Main {
public static int digui(int n) {
if(n==1) {
return 1;
}else {
return digui(n-1)*2;
// F(n)=F(n-1)+F(n-2)+…F(1)+1
//F(n-1)= F(n-2)+…F(1)+1
// 两式相减得F(n)=2F(n-1) ;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int n=sc.nextInt();
System.out.println(digui(n));
}
}
}
斐波那契数
题目描述
Kimi号称自己已经记住了1-100000之间所有的斐波那契数。
为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。
当然,斐波那契数会很大。
因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。
输入
输入有多组数据。
每组数据一行,包含一个整数n (1≤n≤100000)。
输出
对应每一组输入,输出第n个斐波那契数的最后6位。
样例输入 Copy
1
2
3
4
100000
样例输出 Copy
1
2
3
5
537501
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(System.in);
int []result = new int[100001];
result[0]=1;
result[1]=1;
for(int i=2;i<100001;i++){
result[i] = (result[i-1]+result[i-2])%1000000;
}
while(cin.hasNext()){
int n = cin.nextInt();
System.out.printf(n<25?"%dn":"%06dn",result[n]);
}
}
}
蜂房
题目描述
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。
输入
多组数据输入,每组数据包含两个正整数a, b,且 a<b。
输出
蜜蜂从蜂房a爬到蜂房b的可能路线数。
样例输入 Copy
1 2
3 4
样例输出 Copy
1
1
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static int s(int n) {
if(n==0||n==1) {
return 1;
}
return s(n-1)+s(n-2);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int a = scanner.nextInt();
int b = scanner.nextInt();
if(a>b) {
int t;
t=a;
a=b;
b=t;
}
int num = b - a;
System.out.println(Main.s(num));
}
}
}
数字求和
题目描述
使用递归编写一个程序,计算一个正整数中所有数字之和。例如输入234,输出9
输入
多组输入,每组输入一个正整数。
输出
输出结果,每个结果占一行。
样例输入 Copy
234
样例输出 Copy
9
import java.util.*;
import java.util.Scanner;
public class Main {
public static int sum(int n) {
if(n==0) {
return 0;}
return sum(n/10)+n%10;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n;
n=scanner.nextInt();
System.out.println(Main.sum(n));
}
}
}
XP的楼梯
题目描述
XP是个淘气的孩子,他最近迷上了跳楼梯。他可以一次跳一级,也可以一次跳两级,他居然还能够一次跳三级楼梯(危险动作,请勿模仿)。某次,XP在跳完楼梯后突然想到一个问题,如果有n级楼梯,他从第一级开始往上跳,一直跳到第n级共有多少种不同的方案?你能帮他解决这个问题吗?当然,如果只有一级楼梯,很明显他只有一种选择。
输入
单组输入数据 n (0<n<30)
输出
输出一行结果
样例输入 Copy
29
样例输出 Copy
15902591
import java.util.Scanner;
public class Main {
public static int s(int n) {
if(n==1||n==2) {
return 1;
}else if(n==3) {
return 2;
}else
return s(n-1)+s(n-2)+s(n-3);
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
System.out.println(Main.s(n));
}
}
字符统计
题目描述
输入一行字符串(字符串长度小于10000,由大小写字母、阿拉伯数字和空格组成),分别统计出其中大写英文字母,小写英文字母、阿拉伯数字和空格的个数。
输入
一行字符串(字符串长度小于10000,由大小写字母、阿拉伯数字和空格组成)
输出
分别输出大写英文字母,小写英文字母、阿拉伯数字和空格的个数,用空格隔开
样例输入 Copy
h0u84nfx 7
样例输出 Copy
0 5 4 1
import java.util.Scanner;
public class Main {
static int A = 0;
static int a1 = 0;
static int num =0;
static int countA =0;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);//扫描器,接受控制台的输入
String scanStr = scan.nextLine();//取出控制台的一行信息
char[] a = scanStr.toCharArray();//将接收到的字符串变成字符数组
for(int i = 0;i<a.length;i++){
if(a[i]>64&&a[i]<91) {
A+=1;
}else if(a[i]>=97&&a[i]<=122) {
a1+=1;
}else if((int)a[i]>47&&(int)a[i]<=57) {
num+=1;
}else {
countA+=1;
}
}
System.out.print(A);
System.out.print(' ');
System.out.print(a1);
System.out.print(' ');
System.out.print(num);
System.out.print(' ');
System.out.print(countA);
}
}
数的划分
题目描述
使用递归编写一个程序,求一个正整数n的所有划分个数。
例如,输入3,输出3;输入4,输出5。
输入
多组输入,每一组是一个正整数n。
输出
输出划分数。
样例输入 Copy
3
4
样例输出 Copy
3
5
import java.util.Scanner;
public class Main {
//将n的最大加数不大于m的划分个数记作q(n,m)
public static int q(int n, int m) {
if (n < 1 || m < 1)
return 0;
if (n == 1 || m == 1)
return 1;
if (n < m)
return q(n, n);
if (n == m)
return q(n, m - 1) + 1;
return q(n, m - 1) + q(n - m, m);
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
int n;
while(cin.hasNext()) {
n=cin.nextInt();
int s= q(n,n);
System.out.println(s);
}
}
}
最后
以上就是敏感钻石为你收集整理的HNUCM-OJ 递归(java)汉诺塔全排列九数组分数斐波那契数蜂房数字求和XP的楼梯字符统计数的划分的全部内容,希望文章能够帮你解决HNUCM-OJ 递归(java)汉诺塔全排列九数组分数斐波那契数蜂房数字求和XP的楼梯字符统计数的划分所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复