続行(3N + 1)の推測:1005タイトル--PATシェル練習

Kharazi(Callatz)推測の説明は、1001に与えられています。このトピックでは、状況はやや複雑です。

我々が確認した場合、二重カウントを避けるために、番号が遭遇した各再帰的に記録することができたときに、Kharaziは推測します。例えば  N- = 3を検証するための時間、私たちはとき、3,5,8,4,2,1を計算する必要があります  は、n- = 検証5,8,4,2のための時間を直接Kharaziは推測に決定することができ、検証に遭遇したとき、それは数4 3を持っているので信憑性は、ダブルカウントせずに、我々は数の5,8,4,2 3「報道」と呼ばれています。私たちは、数の欄の番号に電話をかける  N場合は、「重要な番号」で  、nはシリーズの他の図でカバーすることはできません。

今、検証すべき一連の番号を与えられ、私たちは、あなただけは残りの番号を確認するために繰り返されている必要はありませんが、そのうちのいくつかのキー番号を確認する必要があります。あなたの仕事は降順に出力することによると、これらのキー数値を見つけることです。

入力フォーマット:

各テストは、テスト入力を含み、最初の行は、正の整数で与えられる  K(<)、第二列が与えられた  正の整数Kは、互いに異なる認証される  N(1)から値、空間番号を分離しました。

出力フォーマット:

出力キー数値の降順で行ごとに各テストケース出力、。数字の間の空間によって分離されたが、スペースを含まない行の後、最後の番号。

サンプル入力:

6
3 5 6 7 8 11

出力例:

7 6
分析:
  1.値が連想配列によって決定されるべきでは最小値です。
  2.あなたはおよそ1001を実行するスクリプトを使用することができ、問題が関係をカバーし理解するために、それぞれ、これらの番号が3568のために、見つけることができ、含まれているとの間の関係の存在が含まれています:6→3→5→8 、711のために、関係7つの→11年代があります。
これは、問題が存在するかどうかを決定することができるカバレッジの数で配列されていない数nによって決定することができます。
wyf349 @ Ubuntuの:〜/ユーザ/ study_shell $ ./1005.callatz.err1.sh# 中間値を記憶アレイ、印刷増加
:. 3 N-入力を
5 1 2 8 4。
wyf349 Ubuntuの@:〜/ユーザ/ study_shell $ ./1005 .callatz.err1.sh 
:. 5 N- INPUT 
8 4 2 1。
wyf349 Ubuntuの@:〜/ユーザー/ study_shell ./1005.callatz.err1.sh $ 
:. 6 N- INPUT 
。3. 1. 5 2. 8. 4 
wyf349 Ubuntuの@:〜/ユーザー/ study_shell ./1005.callatz.err1.sh $ 
:. 8 N- INPUT 
。4. 1 2

  次のように特定のコード、+1いませんでした

#/ binに/ bashの
#Callatzチェックルール
func_check(){ 
        [式expr $ '2' -eq%のn- 0] IF 
        次いで
                N-エコー= ' "$ N- / 2" | BC ` 
                。N- =`エコー「((3 N- $ *)+1)/ 2「| bc`の
        Fiの
} 

読み取り-p 『入力STR:』ここにSTR#文字入力グループは、直接、複数行入力の問題を解決しない-dパラメータを使用すると、複数行することができますが、ユーザーが指定する必要がありますターミネーター、単に最初の行を無視

#はarr_n連想配列を定義arr_n -Aを宣言

N-では$(エコー$のSTR)
を行う
    IF [$ A 0 -A $ N-N - GT -LT-100];次に$右nは-IS」エコー! ! ";他エコー" NO NUM「&&番出口を1; Fiの2>を/ dev / null 
    ARR =(N $)#入力の最初の要素として、
	I = 1。
	しばらく[$ 1 = N-。!]    
		func_check 
		ARR [$ I] = $ N- 
		I ++はLET 
	DONE 
	$ {ARR [@]} #echo
	$でJ {ARRのための[@]}   
	行う
		[$ jを] ++#統計arr_n、同じ増分させ、連想配列の数
	DONE      
DONE 

$ {arr_n [@]!}にarr_titleのために
行う
        エコー$ strを| grepを-wq $ arr_title#入力されたデジタルの数かどうかを決定する
        場合[-eq $ 0≦]   
        次に
                $ $ {} {arr_title arr_n [$ {arr_titleを}]}エコー| AWK「{(== $ 2 1)の場合、1プリント$} ' 
        Fiは
、TACまたは直接ソート- |②tacは逆の順序であり、ソート使用する必要がある。①パイプは常に値TACが不足ソートの部分を通過するように、処理部が処理される2つの問題があるTAC位逆順序|をDONE R逆順

  質問は今、問題の殻を解決する方法はありません直接(テキストのリダイレクトを使用しない、最後に変更されません)複数行を読んで

おすすめ

転載: www.cnblogs.com/wyf-349/p/11245649.html