漢諾塔
/**
漢諾塔
*/
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?"%d\n":"%06d\n",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);
}
}
}