2013第4回JavaグループBブルーブリッジカップ州大会本当の質問

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

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


質問1:世紀末の週

タイトルの説明
1999年12月31日が世界の終わりであると主張するカルトがありました。もちろん、噂は自滅的です。将来のある世紀の終わりの12月31日が月曜日だと言う人もいます...
興味深いことに、世紀の終わりのどの年の12月31日も月曜日になることはできません!!だから、「噂のメーカー「再び日曜日に変更されました... 1999年の12月31日は金曜日です。質問してもいいですか:将来の最も近い世紀(つまりxx99)のどれが12月31日の日曜日(つまり日曜日)になるでしょうか?
(これだけ4つの整数を書くなど、12月31日追加情報を書き込みません)年にお答えください
主題分析
コードと題し



質問2:ずさんな式

タイトルの説明
シャオミンはせっかちです。小学生のとき、先生が黒板に書いた質問を間違ってコピーすることがよくありました。かつて、先生は質問をしました:36 x 495 =?彼はそれを次のようにコピーしました:396 x 45 =?しかし、結果は劇的であり、彼の答えは正しいことが判明しました!36 * 495 = 396 * 45 = 17820ので、次のような多くの偶然が発生する可能性があります。27* 594 = 297 * 54 abcdeが1から9までの5つの異なる数を表すと仮定します(これらは異なる数であり、そうではないことに注意してください)含む0)次の形式を満たすことができる式の種類はいくつですか:ab * cde = adb * ce?コンピュータの利点を利用して、すべての可能性を見つけ、さまざまな計算の種類と数に答えてください。可換乗算の法則を満たす式は異なるタイプとしてカウントされるため、答えは偶数でなければなりません。
回答はブラウザから直接送信されます。
注:最終的な統計カテゴリを表す番号のみを送信し、回答プロセスやその他の冗長なコンテンツは送信しないでください。
トピック分析
トピックコード



質問3:中国の活性化

トピックの説明
XiaoMingは、学校の楽しいスポーツ大会に参加しました。その1つは、ジャンプグリッドです。地面にはいくつかのグリッドが描かれており、以下に示すように、各グリッドに単語が書き込まれます(p1.jpgも参照)。

私から始めて、私から始めて
、活性化から
始めて、活性化から
始めて、中国の
競争の活性化から始めて、最初に「from」という言葉でグリッドの左上隅に立って、あなたは隣接するグリッドに水平または垂直にジャンプすることができます、ただしジャンプすることはできません。対角グリッドまたは他の場所に移動します。常に「华」という単語の最後にジャンプします。スキップを要求されたルートは、「私から中国を活性化するために」というフレーズを構成しているにすぎません。
XiaoMingが合計でいくつの可能なジャンプルートを計算するのを手伝ってください。
ここに画像の説明を挿入

答えは整数です。ブラウザから直接数値を送信してください。
注:回答プロセスやその他の補足説明コンテンツを送信しないでください。
トピック分析
トピックコード



4番目の質問:ゴールデン連続ポイント

タイトルの説明
黄金比0.61803 ...は無理数です。この定数は非常に重要であり、多くの工学的問題に現れます。この数を非常に正確に見つける必要がある場合があります。一部の精密工学では、定数の精度が非常に重要です。ハッブル宇宙望遠鏡のことを聞いたことがあるかもしれません。最初に持ち上げた後、人工的な処理エラーが見つかりました。このような巨大なものの場合、実際にはミラー処理の髪の毛よりも何倍も薄いエラーでした。「近視」になりました。 「!!家の
近くで、黄金比をできるだけ正確に見つけるにはどうすればよいですか?多くの方法があります。より簡単な方法は、連分数を使用することです。

              1
黄金数 = ---------------------
                    1
         1 + -----------------
                      1
             1 + -------------
                        1
                 1 + ---------
                      1 + ...

連分数が計算される「レイヤー」が多いほど、その値は黄金比に近くなります。この機能を使用して、黄金比の十分に正確な値を見つけてください。小数点以下100桁に丸める必要があります。
小数点以下3桁の値:0.618小数点以下
4桁の値:0.6180小数点以下
5桁の値:0.61803小数点以下
7桁の値:0.6180340
(末尾の0に注意してください。無視することはできません)
あなたの仕事は次のとおりです。小数点以下100桁の精度でゴールデンレシオ値を書き留めます。
注:仮数は四捨五入されています!仮数を0にしてください!
もちろん、答えは小数点以下100桁の小数です。ブラウザから直接数値を送信してください。
注:回答プロセスやその他の補足説明コンテンツを送信しないでください。

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



5番目の質問:有理数

タイトルの説明
有理数は、2つの整数の比率として表すことができる数です。一般に、おおよその小数を使用します。ただし、エラーが許可されない場合があり、有理数を表すために2つの整数を使用する必要があります。
この時点で、「有理数クラス」を作成できます。次のコードは、最初にこの目標を達成します。簡潔にするために、加算および乗算演算のみを提供します。

class Rational
{
    
    
    private long ra;
    private long rb;
    
    private long gcd(long a, long b){
    
    
        if(b==0) return a;
        return gcd(b,a%b);
    }
    public Rational(long a, long b){
    
    
        ra = a;
        rb = b;    
        long k = gcd(ra,rb);
        if(k>1){
    
     //需要约分
            ra /= k;  
            rb /= k;
        }
    }
    // 加法
    public Rational add(Rational x){
    
    
        return ________________________________________;  //填空位置
    }
    // 乘法
    public Rational mul(Rational x){
    
    
        return new Rational(ra*x.ra, rb*x.rb);
    }
    public String toString(){
    
    
        if(rb==1) return "" + ra;
        return ra + "/" + rb;
    }
}
 
使用该类的示例:
    Rational a = new Rational(1,3);
    Rational b = new Rational(1,6);
    Rational c = a.add(b);
    System.out.println(a + "+" + b + "=" + c);

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



6番目の質問:3つのパーツの注文

タイトルの説明
クイックソート、ヒルソートなど、一般的なソートには多くの古典的なアルゴリズムがあります。
しかし、実際のアプリケーションでは、多くの場合、多かれ少なかれ特別な要件があります。これらの古典的なアルゴリズムを適用する必要はありません。実際の状況に基づいて、より優れたソリューションを構築できます。
たとえば、整数配列の数値を並べ替えて並べ替えます。
すべての負の数を左に、正の数を右に、0を中央に配置します。問題の特徴は、負の領域と正の領域で順序が必要ないことです。この機能を使用すると、1回の線形スキャンで戦闘を終了できます!!
次のプログラムはこの目標を達成しました。

    static void sort(int[] x)
    {
    
    
        int p = 0;
        int left = 0;
        int right = x.length-1;
        
        while(p<=right){
    
    
            if(x[p]<0){
    
    
                int t = x[left];
                x[left] = x[p];
                x[p] = t;
                left++;
                p++;
            }
            else if(x[p]>0){
    
    
                int t = x[right];
                x[right] = x[p];
                x[p] = t;
                right--;            
            }
            else{
    
    
                _________________________;  //代码填空位置
            }
        }
    }

配列が指定されている場合:
25,18、-2,0,16、-5,33,21,0,19、-16,25、-3,0
、並べ替え後:
-3、-2、-16、 -5,0,0,0,21,19,33,25,16,18,25
トピック分析
トピックコード



質問7:間違ったチケット

タイトル説明
ある秘密関連ユニットが特定の種類の請求書を発行し、年末に回収する必要があります。
各チケットには一意のID番号があります。年間を通してすべての請求書のID番号は連続していますが、IDの開始番号はランダムに選択されます。
スタッフの過失により、ID番号の入力時にエラーが発生し、IDの番号が不足し、別のIDが重複していました。
あなたの仕事は、プログラミングを通して壊れた番号のIDと繰り返された番号のIDを見つけることです。
最大数と最小数の間で壊れた数が発生することはないと想定します。
プログラムは、最初に整数N(N <100)を入力して、データ行の数を示す必要があります。
次に、N行のデータを読み込みます。
データの各行の長さはさまざまで、スペースで区切られた正の整数(100000以下)の数(100以下)です。
各整数はID番号を表します。

プログラムは、スペースで区切られた2つの整数mnを含む1行を出力する必要があります。
その中で、mは壊れたIDを表し、nは繰り返されたIDを表します

例:
ユーザー入力:
2
5 6 8 11 9
10 12 9

プログラム出力:
7 9

別の例:
ユーザ入力:
6
164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196
172 189 127 107 112 192 103 131 133 169 158
128 102 110 148 139 157 140 195 197
185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190
149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188
113 130 176 154 177 120 117 150 114 183 186 181 100 163160167147198111119

プログラム出力:
105 120

リソース契約:
(仮想マシンを含む)ピークメモリ消費量<64Mの
CPU消費量<2000ミリ秒
タイトル解析
タイトルコード



質問8:ラッキーナンバー

タイトルの説明
ラッキーナンバーは、ポーランドの数学者ウラムによって名付けられました。素数の生成と同様の「ふるい法」を使用して生成されます。
まず、自然数1、2、3、4、5、6、...を書きます
。1は最初のラッキーナンバーです。
番号2から始めます。シリアル番号が2で割り切れるすべてのアイテムを削除し、次のようになります:
1 _ 3 _ 5 _ 7 _ 9…縮小して、次のように並べ替えます:
1 3 5 79 …。このとき、2番目のラッキーナンバーは3で、シーケンスナンバーの位置にある3で割り切れる数字はすべて削除されます。シリアル番号の位置であり、番号自体が3で割り切れるかどうかではないことに注意してください!!削除された番号は5、11、17、…
この時点で7は3番目のラッキー番号であり、次にの位置を削除します。 7で割り切れるシリアル番号(19,39、...)
最後の残りのシーケンスは類似しています:1、3、7、9、13、15、21、25、31、33、37、43、49
、 51、63、67、69、73、75、79、…
この質問には次のものが必要です。
スペースで区切って2つの正の整数mnを入力します(m <n <1000 * 1000)
プログラムはmとnの間のラッキーナンバーの数を出力します( mとnを含まない)。

例:
ユーザー入力:
1 20
プログラム出力:
5

例:
ユーザー入力:
30 69
プログラム出力:
8

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

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



質問9:混合数

タイトルの説明
100は混合番号として表すことができます:100 = 3 + 69258/714
は次のように表すこともできます:100 = 82 + 3546/197
注機能:混合番号では、番号1〜9は別々に1回だけ表示されます(0を含まない)。
このような混合数の100の11の表現があります。
質問の要件:
標準入力から正の整数N(N <1000 * 1000)を読み取ると、
プログラムは、混合数で表されるすべての数を繰り返さずに、1〜9の数の数を出力します。
注:すべての表現を出力する必要はありません。表現の数を数えるだけです。
例えば:
ユーザー入力:
100
プログラム出力:
11
別の例:
ユーザー入力:
105
プログラム出力:
6
リソース規則:
(仮想マシンを含む)ピークメモリ消費<64Mの
CPU消費量<3000ms
タイトル解析
タイトルコード



質問10:連続する間隔の数

タイトルの説明
XiaoMingは最近、このような奇妙で興味深い質問について考えています。1〜N
の完全な配列には、連続する間隔がいくつありますか。ここで言及されている連続区間の定義は次のとおりです。
区間[L、R]内のすべての要素(つまり、この配置のL番目からR番目の要素)を昇順で並べ替えると、R-L +1の長さが得られます。 「連続」シーケンスは、この間隔連続番号間隔と呼ばれます。
Nが非常に小さい場合、Xiao Mingは答えをすばやく計算できますが、Nが大きくなると、問題はそれほど単純ではありません。XiaoMingはあなたの助けを必要としています。
入力形式:
最初の行は正の整数N(1 <= N <= 50000)で、配列全体のスケールを表します。
2行目は、N個の異なる数Pi(1 <= Pi <= N)であり、これらのN個の数の特定の順列を表します。
出力形式:
異なる連続する間隔の数を示す整数を出力します。
例:
ユーザー入力:
4
3 2 4 1
プログラムは出力する必要があります:
7
ユーザー入力:
5
3 4 2 5 1
プログラムは出力する必要があります:
9
説明:
最初の使用例では、7つの連続した間隔があります:[1,1] 、[1,2]、[1,3]、[1,4]、[2,2]、[3,3]、[4,4]
2番目のユースケースでは、それぞれ9つの連続した間隔がありますはい: [1,1]、[1,2]、[1,3]、[1,4]、[1,5]、[2,2]、[3,3]、[4,4]、[5 、5]

リソースの合意:
ピークメモリ消費量(仮想マシンを含む)
<64MCPU消費量<5000ms
質問分析
質問コード



おすすめ

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