試験問題基礎練習FJの文字列(ハノータ)——再帰
11196 ワード
再帰に対する理解は放棄である.
再帰の全過程を理解し追跡する企みを放棄し、再帰の2つの階層間の引き継ぎと再帰の終結の条件だけを理解します.
文書ディレクトリ再帰的な理解は放棄である. 再帰の全過程を理解し追跡する企みを放棄し、再帰の2つの階層間の引き継ぎと再帰の終了の条件だけを理解します. ハノータ H-ハノータV HDU-1995 試験問題基礎練習FJの文字列 ハノータ
1.ハノタに対して、k層の皿と、それぞれa、b、cの柱の3つを与え、皿はすべてa上にある.私たちはどのように問題を解決しますか?私たちはk-1層をaからbに移動し、k番目の皿をaからcという柱に移動し、k-1層をkの上に移動します.k−1層がどのように移動するかについては考慮する必要はない.2.この2つの関係について、k層の総移動数はk−1層の移動数+第k層のaからcまでの数であることが分かった.(つまり1)+k-1層の移動数.3.同様に、k-1層も同じですね.つまり、k-2層の移動数に、k-1層目のaからcへの移動数に加えて、k-2層目のk-1層への移動数を加えます.k-1層については、考慮する必要はありません.**4.**最後に再帰的な終了条件になりました.1層だけの場合、直接1
H-ハノータV HDU-1995
トランスミッションドアのテーマは、x層ディスクを移動するには、k層目に何歩移動したか1層目:1層目移動1歩2層目:1層目移動2歩2層目移動1歩3層目:1層目移動4歩2層目移動2歩3層目移動1歩...ここから法則が見つかります2^(x-k)が、powで爆発するに違いありません
試験問題基礎練習FJの文字列
転送ドアという問題は私に再帰をさらに深めさせた.
資源制限時間制限:1.0 sメモリ制限:512.0 MB問題記述FJは砂盤にこのような文字列を書いた:A 1=「A」A 2=「ABA」A 3=「ABACABA」A 4=「ABACABADABACABA」......その中の法則を見つけてすべての数列ANを書くことができますか?入力フォーマットには、N≦26の数しかありません.出力フォーマットは該当する文字列ANを出力し、改行で終了してください.出力に余分なスペースや改行、戻り文字を含めてはいけません.サンプル入力3サンプル出力ABACABA
この問題はハノタと同じです.A 4=A 3+1+A 3…Ak=Ak-1+1+Ak-1再帰終了A
再帰の全過程を理解し追跡する企みを放棄し、再帰の2つの階層間の引き継ぎと再帰の終結の条件だけを理解します.
文書ディレクトリ
1.ハノタに対して、k層の皿と、それぞれa、b、cの柱の3つを与え、皿はすべてa上にある.私たちはどのように問題を解決しますか?私たちはk-1層をaからbに移動し、k番目の皿をaからcという柱に移動し、k-1層をkの上に移動します.k−1層がどのように移動するかについては考慮する必要はない.2.この2つの関係について、k層の総移動数はk−1層の移動数+第k層のaからcまでの数であることが分かった.(つまり1)+k-1層の移動数.3.同様に、k-1層も同じですね.つまり、k-2層の移動数に、k-1層目のaからcへの移動数に加えて、k-2層目のk-1層への移動数を加えます.k-1層については、考慮する必要はありません.**4.**最後に再帰的な終了条件になりました.1層だけの場合、直接1
#include
using namespace std;
int n;
solve(int x,char a,char b,char c){//a ,b ,c
if(x==1){// , c
printf("%c->%c
",a,c);
}
else{
solve(x-1,a,c,b);//x-1 a b
solve(1,a,b,c);// k a c
solve(x-1,b,a,c);//x-1 b c ( k )
}
}
int main(){
scanf("%d",&n);
solve(n,'A','B','C');
}
H-ハノータV HDU-1995
トランスミッションドアのテーマは、x層ディスクを移動するには、k層目に何歩移動したか1層目:1層目移動1歩2層目:1層目移動2歩2層目移動1歩3層目:1層目移動4歩2層目移動2歩3層目移動1歩...ここから法則が見つかります2^(x-k)が、powで爆発するに違いありません
#include
using namespace std;
typedef long long ll;
int n,x,k;
ll solve(int a,int b){
if(a==b){
return 1;
}
return 2*solve(a-1,b);
}
int main(){
scanf("%d",&n);
while(n--){
scanf("%d%d",&x,&k);
printf("%lld
",solve(x,k));
}
return 0;
}
試験問題基礎練習FJの文字列
転送ドアという問題は私に再帰をさらに深めさせた.
資源制限時間制限:1.0 sメモリ制限:512.0 MB問題記述FJは砂盤にこのような文字列を書いた:A 1=「A」A 2=「ABA」A 3=「ABACABA」A 4=「ABACABADABACABA」......その中の法則を見つけてすべての数列ANを書くことができますか?入力フォーマットには、N≦26の数しかありません.出力フォーマットは該当する文字列ANを出力し、改行で終了してください.出力に余分なスペースや改行、戻り文字を含めてはいけません.サンプル入力3サンプル出力ABACABA
この問題はハノタと同じです.A 4=A 3+1+A 3…Ak=Ak-1+1+Ak-1再帰終了A
#include
using namespace std;
int n;
void solve(int x){
if(x==1){
printf("A");
}
else{
solve(x-1);
printf("%c",'A'+x-1);
solve(x-1);
}
}
int main(){
scanf("%d",&n);
solve(n);
}