2014年の第5回JavaグループAブルーブリッジカップ州大会の本当の質問

ブルーブリッジカップの長年にわたるトピックコラムです。更新され、前年度からの実際の質問と回答が公開されます。友達を歓迎して私に注意を払ってください。あなたの好きなものと注意が私にとって最高の動機です!
毎日1つの本当の質問を更新するので、お楽しみに

Lanqiaoカップの過去の論文と詳細な回答


質問1:年齢を推測する

タイトルの説明
シャオミンは2人の妹を連れてランタンフェスティバルに参加しました。誰かが彼らに何歳かと尋ねると、彼らはいたずらっぽく言った:「私たちの年齢の積は私たちの年齢の合計の6倍です」。シャオミンは、「彼らは双子ではなく、年齢差は8歳以下でなければなりません」と付け加えました
。シャオミンの妹の年齢を書き留めてください。
トピック分析
トピックコード



2番目の質問:李白がワインを打つ

タイトルの説明
偉大な詩人である李白は、生涯おいしい飲み物を飲んでいます。幸いなことに、彼は決して運転しません。
ある日、彼は2つのバケツのワインが入ったヒップフラスコを持って家を出ました。彼は
歩きながら歌った:何事もなく通り歩き、鍋を持って飲む。
すべての店で2倍になり、花に出会ったらバケツを飲みます。
途中、お店に5回出会って10回過ごしました。最後に出会ったのは花だと知って、ワインを飲みました。
李白とお店や花との出会いの順序を計算してください。お店との出会いをaとして、花との出会いをbとして記録できます。次に:babaabbabbabbbbは妥当な順序です。このような答えはいくつありますか?考えられるすべての解決策(タイトルで示されたものを含む)の数を計算してください。
注:ブラウザから回答を送信してください。答えは整数です。余分なコンテンツを書かないでください。
トピック分析
トピックコード



3番目の質問:魔法の公式

タイトルの説明
4つの異なる数値で構成される乗算式であり、それらの積は依然としてこれらの4つの数値で構成されています。
例:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
すべてが要件を満たしています。
可換乗算の法則を満たす式が同じケースとして数えられる場合、上記の3つのケースを含めて、要件を満たすための式はいくつありますか?
番号を入力し、ブラウザから回答を送信してください。余分なコンテンツは入力しないでください(例:すべての計算を一覧表示します)。
トピック分析
トピックコード



4番目の質問:ログを書く

タイトルの説明
ログの書き込みは、プログラムの一般的なタスクです。ここで、3つのファイルt1.log、t2.log、およびt3.logの間でログを交互に書き込む必要があります。つまり、t1.logが最初に書き込まれ、t2.logが2回目に書き込まれ、... t1.logが4回目に書き込まれるというように続きます。
次のコードは、さまざまなログファイルに順番に書き込むこのロジックをシミュレートします。
下線部分に不足しているコードを入力してください。ブラウザから回答を送信してください。
注:タイトルの既存のコンテンツを入力したり、説明や説明テキストを入力したりしないでください。

public class A
{
    
    
	private static int n = 1;
	
	public static void write(String msg)
	{
    
    
		String filename = "t" + n + ".log";
		n = ____________;
		System.out.println("write to file: " + filename + " " + msg);
	}
}

トピック分析
トピックコード



質問5:チャンピオンシップ

タイトルの説明
n個のデータから1番目と2番目に大きいデータを選択する場合(出力データの場所と値が必要)、最小回数を比較するためにどの方法が使用されますか?私たちはスポーツ選手権に触発されることができます。図[1.png]に示すように、8人のプレーヤーのトーナメントでは、最初にお互いを捕まえて比較し、それらの半分を排除します。勝者はペアで競い合いました...最初の場所が決定されるまで。1位が出力されたら、黄色でマークされた位置を再一致させます。次のコードはこのアルゴリズムを実装しています(データに同一の値がないことを前提としています)。コードは、図のツリーを表すために配列を使用する必要があります(これは完全な二分木であり、欠点を埋める必要があることに注意してください)。データ自体は保存されませんが、データの添え字は保存されます。最初のデータが出力された後、その場所は-1としてマークされます

class A{
    
    
   	//a 表示待处理的数据,长度如果不是2的次幂,则不足位置补为-1
	static void pick(int[] a)
	{
    
    
		int n = 1;
		while(n<a.length) n *= 2;
		
		
		int[] b = new int[2*n-1];
		for(int i=0; i<n; i++){
    
     
			if(i<a.length) 
				b[n-1+i] = i;
			else
				b[n-1+i] = -1;
		}
		
		//从最后一个向前处理
		for(int i=b.length-1; i>0; i-=2){
    
    
			if(b[i]<0){
    
    
				if(b[i-1]>=0)
					b[(i-1)/2] = b[i-1]; 
				else
					b[(i-1)/2] = -1;
			}
			else{
    
    
				if(a[b[i]]>a[b[i-1]])
					b[(i-1)/2] = b[i];
				else
					b[(i-1)/2] = b[i-1];
			}
		}
		
		//输出树根
		System.out.println(b[0] + ": " + a[b[0]]);
		
		//值等于根元素的位置需要重新pk
		pk(a,b,0,b[0]);
		
		//再次输出树根
		System.out.println(b[0] + ": " + a[b[0]]);
	}
 
	// a 表示待处理数据,b 二叉树,k 当前要重新比拼的位置,v 已经决胜出的值	
   	static void pk(int[] a, int[] b, int k, int v)
	{
    
    
		
		int k1 = k*2+1;
		int k2 = k1 + 1;
		
		if(k1>=b.length || k2>=b.length){
    
    
			b[k] = -1;
			return;
		}
		
		if(b[k1]==v) 
			pk(a,b,k1,v);
		else
			pk(a,b,k2,v);
		
		
		//重新比较
		if(b[k1]<0){
    
    
			if(b[k2]>=0)
				b[k] = b[k2]; 
			else
				b[k] = -1;
			return;
		}
		
		if(b[k2]<0){
    
    
			if(b[k1]>=0)
				b[k] = b[k1]; 
			else
				b[k] = -1;
			return;
		}
		
		if(__________________________)  //填空
			b[k] = b[k1];
		else
			b[k] = b[k2];
	}
}

プロセスを注意深く分析し、不足しているコードを入力してください。
ブラウザから回答を送信し、不足しているコードのみを入力し、既存のコードやその他の説明文などは入力しないでください。
ここに画像の説明を挿入

トピック分析
トピックコード



6番目の質問:六角形の充填

タイトルの説明画像
[1.png]に示す六角形に、1から12までの数字を入力します。
各直線の数の合計を同じにします。
写真では、3つの数字が記入されていますが、アスタリスクで表されている数字を計算していただけますか?
ブラウザから回答を送信してください。余分なコンテンツは入力しないでください。
ここに画像の説明を挿入

トピック分析
トピックコード



質問7:ロープループ

タイトルの説明
今日は100本のロープがありますが、もちろん200本のロープの端があります。
ロープの端がペアになっている場合は、すべてのロープの端を一緒に結びます。最終的に、いくつかのロープループが形成されます(それらが一緒になっているかどうかに関係なく)。
私たちの質問は次のとおりです。最大の確率で形成されるループの数を計算してください。
注:結果は整数です。ブラウザから数値を送信してください。余分なコンテンツを入力しないでください。
トピック分析
トピックコード



質問8:ラングトンのアリ

タイトルの説明
1986年にChrisLangtonによって提案されたLangtonantは、セルオートマトンの一種です。
平面上の正方形のグリッドは、黒または白で塗りつぶされています。四角の一つに「アリ」がいます。蟻の頭の向きは、上、下、左、右です。
アリの動きのルールは非常に単純です。アリが黒いグリッドにある場合は、右に90度回転し、グリッドを白いグリッドに変更して、1マス前方に移動します。アリが白いグリッドにある場合は、左に90度回転します。 、グリッドを黒いグリッドに変更し、1グリッド先に移動します。
ルールは単純ですが、アリの行動は非常に複雑です。最初に残されたルートは、繰り返されるかのようにほぼ対称になりますが、初期状態に関係なく、アリは長い混沌とした活動の後に通常の「高速道路」を開きます。
アリの経路を事前に予測することは困難です。
あなたの仕事は、初期状態に基づいて、n回目の歩行後のラングトンのアリの位置をシミュレートすることです。
【データ形式】

入力データの最初の行は、mnの2つの整数(3 <m、n <100)であり、正方形グリッドの行と列の数を示します。
次はm行のデータです。
データの各行は、スペースで区切られたn個の数値です。0は白いグリッドを意味し、1は黒いグリッドを意味します。

次はデータの行です:xysk、ここでxyは整数で、アリが配置されている行番号と列番号を示します(行番号は上から下に増加し、列番号は左から右に増加し、すべての番号が始まります0から)。sは大文字で、アリの頭の方向を示します。上、下、左、右にUDLRを使用することに同意します。kは、アリがとるステップ数を表します。

出力データは、スペースで区切られた2つの整数pqであり、それぞれ、antがkステップ後のグリッドの行番号と列番号を表します。

たとえば、次のように入力します
。56
0 0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
2 3 L 5
プログラムは次のように出力します:
1 3

別の例では、入力:
3 3
0 0 0
1 1 1
1 1 1
1 1 U 6
プログラムすべき出力:
0

リソース合意:
ピークメモリ消費量(仮想マシンを含む)<256MCPU
消費量<1000ms

要件に厳密に従って出力し、「入力してください...」のような余分なコンテンツを過剰に印刷しないでください。

すべてのコードは同じソースファイルに配置されます。デバッグに合格したら、ソースコードをコピーして送信します。
注:packageステートメントは使用しないでください。jdk1.7以降の機能は使用しないでください。
注:メインクラスの名前はMainである必要があります。そうでない場合、無効なコードとして処理されます。
ここに画像の説明を挿入

トピック分析
トピックコード



質問9:フィボナッチ

タイトル説明
フィボナッチ数列は誰にでもよく知られています。その定義は次のとおりです
。f(x)= 1…(x = 1,2)
f(x)= f(x-1)+ f(x-2)…(x> 2)
与えられた整数nおよびmに対して、
f(1)+ f(2)+…+ f(n)の値を求めますただし、この値は非常に大きい可能性があるため、f(m)を法として取ります。
式については[図1.png]を参照してください。
ただし、この数はまだ非常に大きいため、pを再度モジュロする必要があります。
[データ形式]
スペースnmp(0 <n、m、p <10 ^ 18)で区切られた整数の行として入力
、1つの整数として出力

たとえば、次のように入力すると、
2 3 5、
プログラムは次のように出力します:
0

別の例として、入力:
15 11 29
プログラムは次のように出力する必要があります:
25

リソース合意:
ピークメモリ消費量(仮想マシンを含む)
<256MCPU消費量<2000ms

要件に厳密に従って出力し、「入力してください...」のような余分なコンテンツを過剰に印刷しないでください。

すべてのコードは同じソースファイルに配置されます。デバッグに合格したら、ソースコードをコピーして送信します。
注:packageステートメントは使用しないでください。jdk1.7以降の機能は使用しないでください。
注:メインクラスの名前はMainである必要があります。そうでない場合、無効なコードとして処理されます。
ここに画像の説明を挿入

トピック分析
トピックコード



質問10:変動シリーズ

タイトルの説明
次のシーケンスを確認してください。130
2 -1 1 -2…
このシーケンスの後者の項目は、前の項目と比較して常に2増加するか、3減少します。
東東はこの種のシーケンスに非常に興味があります。彼は長さnとsで整数シーケンスがいくつ可能か知りたいのですが、後の項は常に前の項よりもaを増やしたりbを減らしたりしますか?
【データ形式】
入力の1行目に4つの整数nsabが含まれています。意味は上記の通りです。
条件を満たす解の数を示す整数を含む行を出力します。この数は非常に多いので、残りのプラン数を100000007で割った値を出力してください。

たとえば、次のように入力します
。410 2 3
プログラムは次のように出力する必要があります:
2

【サンプル説明】
この2つの数字はそれぞれ24 13と74 1-2です。

[データのスケールと規則]
データの10%の場合、1 <= n <= 5、0 <= s <= 5、1 <= a、b <= 5、
データの30%の場合、1 <= n <= 30、0 <= s <= 30、1 <= a、b <= 30;
データの50%について、1 <= n <= 50、0 <= s <= 50、1 <= a、b < = 50;
データの70%の場合、1 <= n <= 100、0 <= s <= 500、1
<= a、b <= 50;データの100%の場合、1 <= n <= 1000、- 1,000,000,000 <= s <= 1,000,000,000、1 <= a、b <= 1,000,000。

リソース合意:
ピークメモリ消費量(仮想マシンを含む)
<256MCPU消費量<2000ms

要件に厳密に従って出力し、「入力してください...」のような余分なコンテンツを過剰に印刷しないでください。

すべてのコードは同じソースファイルに配置されます。デバッグに合格したら、ソースコードをコピーして送信します。
注:packageステートメントは使用しないでください。jdk1.7以降の機能は使用しないでください。
注:メインクラスの名前はMainである必要があります。そうでない場合、無効なコードとして処理されます。
トピック分析
トピックコード



おすすめ

転載: blog.csdn.net/kiwi_berrys/article/details/111832259