トピックリンクします。https://nanti.jisuanke.com/t/39279
二つの動作の定義と、n個の異なるシーケンス番号が与えられる:問題の意味前半と後半交換(かかわらず、中間の奇数がある場合)。2.各Exchange前にそれでもビットと数(奇数、最後の問題がある場合)。これら二つの動作によりQ.、異なる配列の数を得ることができます。
アイデア:質問の法則を見つけるための典型的な演奏テーブルには、次のゲーム学習します。テーブルに次のコードを打ちます:
書式#include <cstdioを> 使用して 名前空間はstdを、 INT [ 10005 ] B [ 10005 ]。 int型のn年。 ブールチェック(){ ブールフラグ= 1 。 以下のために(int型 i = 1 ; iは= N <; ++ I)の 場合([I] =!B [I]){ フラグ = 0 。 破ります; } リターンフラグ。 } INT メイン(){ ため(N = 1、N <= 30 ; ++ N){ int型 HF = N / 2 。 ANS = 0 ; 以下のために(int型 i = 1 ; iは= N <; ++ I) [I] = I、[I] B = I。 ながら、(1 ){ ため(int型 I = 1 ; I <= HF; ++ I){ int型 TMP = B [i]は、 B [i]は = bの[N-HF + I]。 B [N = I + -hf] TMPを、 } もし(チェック())ブレーク。 ++ ANS; 以下のために(int型 I = 1 ; I <= N- 1、I + = 2 ){ int型 TMP = B [i]は、 B [i]は = bの[I + 1 ]。 B [I + 1 ] = TMPと、 } もし(チェック())ブレーク。 ++ ANS; } printf(" %のD:%Dを\ n "、N、ANS + 1 )。 } リターン 0 ; }
そして、あなたは法律を見つけることができます。
N%4 == 0:4歳=
N%4 == 1:IF(N == 1)ANS = 1
プレゼンスANS = 2 * N
%4 == 2年N = N
N%4 == 3:IF(N == 3)ANS = 6
存在ANS = 12
ACコード:
書式#include <cstdioを> 使用して 名前空間はstdを、 INT [ 10005 ] B [ 10005 ]。 int型のn年。 ブールチェック(){ ブールフラグ= 1 。 以下のために(int型 i = 1 ; iは= N <; ++ I)の 場合([I] =!B [I]){ フラグ = 0 。 破ります; } リターンフラグ。 } INT メイン(){ ため(N = 1、N <= 30 ; ++ N){ int型 HF = N / 2 。 ANS = 0 ; 以下のために(int型 i = 1 ; iは= N <; ++ I) [I] = I、[I] B = I。 ながら、(1 ){ ため(int型 I = 1 ; I <= HF; ++ I){ int型 TMP = B [i]は、 B [i]は = bの[N-HF + I]。 B [N = I + -hf] TMPを、 } もし(チェック())ブレーク。 ++ ANS; 以下のために(int型 I = 1 ; I <= N- 1、I + = 2 ){ int型 TMP = B [i]は、 B [i]は = bの[I + 1 ]。 B [I + 1 ] = TMPと、 } もし(チェック())ブレーク。 ++ ANS; } printf(" %のD:%Dを\ n "、N、ANS + 1 )。 } リターン 0 ; }