クラシック再帰--列に並んで切符を買う
1534 ワード
1試合の試合が始まる前に、切符の販売作業が緊張して行われている.各チケットは50元で、現在30人が並んでチケットの購入を待っており、そのうち20人が50元札を手にし、10人が100元札を手にしている.
切符売り場に小銭がないと仮定し、30人が並んで切符を購入し、切符売り場がお金が見つからない状況にならないようにする異なる列の数を求めた.(約束:同じ額面の札を持っている人が位置を変えて同じ列に並ぶ.)入力:
出力:
入力:
出力:
解释:この问题は简単な再帰问题です.再帰问题については、再帰を脱退する条件をよく考えなければなりません.问题を変えるには小銭を探すことができるように要求されています.だから、50元を持っている人と100元を持っている人がそれぞれ何人いるかは考えません.メモを満たすには、最初に并ぶ人が50元を持っている人でなければなりません.また、並んでいる間は50元を持っている人>=100元を持っている人で、そうでないと部品が見つかりません.詳細な再帰過程は以下の通りです.
コード:
実行結果:
入力:
出力:
入力:
出力:
切符売り場に小銭がないと仮定し、30人が並んで切符を購入し、切符売り場がお金が見つからない状況にならないようにする異なる列の数を求めた.(約束:同じ額面の札を持っている人が位置を変えて同じ列に並ぶ.)入力:
8 7
出力:
1430
入力:
15 13
出力:
7020405
解释:この问题は简単な再帰问题です.再帰问题については、再帰を脱退する条件をよく考えなければなりません.问题を変えるには小銭を探すことができるように要求されています.だから、50元を持っている人と100元を持っている人がそれぞれ何人いるかは考えません.メモを満たすには、最初に并ぶ人が50元を持っている人でなければなりません.また、並んでいる間は50元を持っている人>=100元を持っている人で、そうでないと部品が見つかりません.詳細な再帰過程は以下の通りです.
コード:
import java.util.ArrayList;
import java.util.Scanner;
public class
{
private static char[] c; // ,a 50 ,b 100
private static int n; // 50
private static int m; // 100
private static int cnt = 0; //
public static void Method(int i,int j,int t) //i 50 ,j 100 ,t
{
if(i>n||j>m) // 50 n , 100 m
{
return;
}
if(i=m) // n>m , ,
{
Method(0,0,0); // 0
}
System.out.println(cnt); //
}
}
実行結果:
入力:
8 7
出力:
1430
入力:
15 12
出力:
4345965