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

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

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


質問1:練炭の数

タイトル説明
三角形のピラミッド型の練炭の山があります。具体的:
第1層に1
、第2層に3(三角形に配置)、
第3層に6(三角形に配置)、
第4層に10(三角形に配置)、
...ある
場合全部で100層、練炭はいくつありますか?

練炭の総数を表す数字を入力してください。
注:送信する内容は整数である必要があり、余分なコンテンツや説明テキストを入力しないでください。
トピック分析
トピックコード



質問2:バースデーキャンドル

タイトルの説明
ある人は、ある年から毎年誕生日会を開いており、そのたびに年齢と同じ数のろうそくを吹き消しています。

今数えて、彼は合計236本のろうそくを吹き消しました。

すみません、彼は何歳で誕生日パーティーを始めましたか?

彼が誕生日パーティーを始めた年齢を記入してください。
注:送信する内容は整数である必要があり、余分なコンテンツや説明テキストを入力しないでください。
トピック分析
トピックコード



質問3:ビルドブロック

タイトルの説明
XiaoMingは最近、デジタルブロックを作成するのが好きです。
合計で10個のブロックがあり、各ブロックには0〜9の番号が付いています。


ビルディングブロックのルール:各ブロックを他の2つのブロックの上に配置し、下の2つのブロックよりも小さくする必要があります。
最後に、4層のピラミッドが構築され、すべてのブロックを使用する必要があります。

以下は、2つの修飾された方法です。

   0 
  1 2 
 3 4 5 
6 7 8 9 

   0 
  3 1 
 7 5 2 
9 8 6 4    

そのような方法がいくつあるか計算していただけませんか。

総数を示す数字をご記入ください。
注:送信する内容は整数である必要があり、余分なコンテンツや説明テキストを入力しないでください。
トピック分析
トピックコード



4番目の質問:サブグループ

このトピック
では、競技に参加している9人のアスリートについて説明します。これらのアスリートは、予選のために3つのグループに分ける必要があります。
グループ化スキームとは何ですか?

アスリートをA、B、C、... Iとしてマークします。
次のプログラムは、すべてのグループ化方法を示しています。

プログラムの通常の出力は次のとおりです
。ABCtheDEFGHI
ABC of DEG FHI
ABC DEH the FGI ABC THE
DEI FGH
ABC the DFG EHI
ABC the DFH EGI
ABC DFI EGH
ABC the DGH EFI
the ABC the ABC DGI the EFH
ABC DHI EFG
ABC EFG DHI
ABC the EFH DGI
ABC the EFI DGH
ABC EGH DFI
ABC EGI the DFH
ABC EHI DFG
ABC FGH DEI
ABC FGI DEH
ABC FHI THE DEG
ABC GHI DEF
ABD CEF GHI
ABD CEG FHI
ABD CEH FGI
ABD CEI FGH
ABD CFG EHI
ABD CFH EGI
ABD CFI EGH
ABD CGH EFI
ABD CGI EFH
ABD CHI EFG
ABD EFG CHI
…(以下では省略、合計560行)。

public class A
{
    
    
    public static String remain(int[] a)
    {
    
    
        String s = "";
        for(int i=0; i<a.length; i++){
    
    
            if(a[i] == 0) s += (char)(i+'A');
        }    
        return s;
    }
    
    public static void f(String s, int[] a)
    {
    
    
        for(int i=0; i<a.length; i++){
    
    
            if(a[i]==1) continue;
            a[i] = 1;
            for(int j=i+1; j<a.length; j++){
    
    
                if(a[j]==1) continue;
                a[j]=1;
                for(int k=j+1; k<a.length; k++){
    
    
                    if(a[k]==1) continue;
                    a[k]=1;
                    System.out.println(__________________________________);  //填空位置
                    a[k]=0;
                }
                a[j]=0;
            }
            a[i] = 0;
        }
    }
    
    public static void main(String[] args)
    {
    
    
        int[] a = new int[9];        
        a[0] = 1;
        
        for(int b=1; b<a.length; b++){
    
    
            a[b] = 1;
            for(int c=b+1; c<a.length; c++){
    
    
                a[c] = 1;
                String s = "A" + (char)(b+'A') + (char)(c+'A');
                f(s,a);
                a[c] = 0;
            }
            a[b] = 0;
        }
    }
}

コードを注意深く読み、下線部分に不足しているコンテンツを入力します。
注:既存のコンテンツや説明テキストは入力しないでください。
トピック分析
トピックコード



質問5:宝くじ

タイトルは、
惑星Xが5人のメンバーの観測グループをスターWに送ることを説明しています。
その中で:
国Aは最大4人を送ることができます。
B国は2人まで送ることができます。
国Cは2人まで送ることができます。

では、最終的に観測ミッションはWスターにいくつの異なる国の組み合わせを送るのでしょうか?

次の手順でこの問題を解決します。
配列a []は、各国が送信できる場所の最大数です。
プログラムの実行結果は、次のとおり
DEFFF
CEFFF
CDFFF
CDEFF
CCFFF
CCEFF
CCDFF
CCDEF
BEFFF
BDFFF
BDEFF
BCFFF
BCEFF
BCDFF
BCDEF
...
(101行の合計の下省略します)

public class A
{
    
    
    public static void f(int[] a, int k, int n, String s)
    {
    
    
        if(k==a.length){
    
     
            if(n==0) System.out.println(s);
            return;
        }
        
        String s2 = s;
        for(int i=0; i<=a[k]; i++){
    
    
            _____________________________;   //填空位置
            s2 += (char)(k+'A');
        }
    }
    
    public static void main(String[] args)
    {
    
    
        int[] a = {
    
    4,2,2,1,1,3};
        
        f(a,0,5,"");
    }
}

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



6番目の質問:冬の宿題

トピックの説明
今、小学校の数学の問題はそれほど楽しいものではありません。
この冬の宿題を見てください:

□+□=□□
-□=
□□×□=
□□÷□=□

(表示されない場合は【図1.jpg】をご参照ください)

各正方形は1から13までの特定の数を表しますが、繰り返すことはできません。
例:
6 + 7 = 13
9-8 = 1
3 * 4 = 12
10/2 = 5

そして:
7 + 6 = 13
9-8 = 1
3 * 4 = 12
10/2 = 5

2つの解決策ですら。(加算と乗算は可換法則の後の異なるスキームです)

いくつの解決策を見つけましたか?

プラン数を表す整数を入力してください。
注:送信する内容は整数である必要があり、余分なコンテンツや説明テキストを入力しないでください。
ここに画像の説明を挿入

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



質問7:切手を切る

タイトルの説明
[写真1.jpg]に示すように、12個の星座がつながった12個のスタンプがあります。
今、あなたはそれから5枚のシートを切り取らなければなりません、要件は接続されなければなりません。
(片隅を接続するだけでは接続とはみなされません)例えば
、[写真2.jpg]、[写真3.jpg]では、ピンク色で表示されている部分が修飾カットです。

さまざまなクリッピング方法がいくつあるかを計算してください。

プラン数を表す整数を入力してください。
注:送信する内容は整数である必要があり、余分なコンテンツや説明テキストを入力しないでください。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

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



質問8:球技

タイトル説明
2人でボールをフェッチするゲームをします。
合計N個のボールがあり、各人が順番にボールを取ります。そのたびに、セット{n1、n2、n3}内の任意の数を取ることができます。
ボールが取れない場合はゲームオーバーです。
このとき、奇数のボールを持っている方が勝ちです。
両方が奇数の場合、それは同点です。

双方が最も賢い方法を使用すると仮定すると、
最初のプレーヤーが勝つことができますか?
この問題を解決するためにプログラミングを試してください。

入力形式:
最初の行に3つの正の整数n1 n2 n3、スペースで区切られ、毎回取得できる数を示します(0 <n1、n2、n3 <100)、
2番目の行5つの正の整数x1x2…x5 、スペースで区切られ、5ゲームのボールの初期数を示します(0 <xi <1000)

出力フォーマット:
スペースで区切られた1行あたり5文字。各ゲームで最初にボールをとった人が勝つことができるかどうかをそれぞれ示します。
勝つことができれば、+を出力します。
次に、対戦相手を結ぶ方法がある場合は、0を出力し、
とにかく負けます。次に-を出力します。

たとえば、次のように入力します
。12 3
1 2 3 4 5

プログラムは次のように出力する必要があります。

  • 0 + 0-

別の例として、次のように入力します
。14 5
10 11 12 13 15

プログラムは次のように出力する必要があります:
0-0 + +

別の例として、次のように入力します
。23 5
7 8 9 10 11

プログラムは次のように出力する必要があります。

  • 0 0 0 0

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

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

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



質問9:ボトルの交換

タイトル説明
棚には1〜Nの番号が付いたN本のボトルが置かれています。

たとえば、5本のボトルがあります:
2 1 3 5 4

一度に2本のボトルを拾い、位置を交換する必要があります。
数回後、ボトルのシリアル番号は次のようになります:
1 2 3 4 5

このような単純な状況では、明らかに、リセットするには少なくとも2つの交換が必要です。

もっとボトルがある場合はどうなりますか?あなたはプログラミングによってそれを解決することができます。

入力形式は2行です。1行目:
ボトルの数を示す正の整数N(N <10000)
。2行目:スペースで区切られたN個の正の整数で、ボトルの現在の配置を示します。

出力データは、行の正の整数です。これは、少なくともソートを完了するために実行できる交換の数を意味します。

たとえば、次のように入力します
。53
1 2 5 4

プログラムは次のように出力する必要があります:
3

別の例では、入力:
5
5 4 3 2 1

プログラムは次のように出力する必要があります:
2

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

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

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



質問10:圧縮変換

タイトルの説明
XiaoMingは現在、圧縮アルゴリズムを研究しています。
彼は、圧縮中に値を小さくすることができれば、エントロピーコーディングによってより高い圧縮率を得ることができることを知っています。
ただし、値を小さくすることは困難です。

最近、Xiao Mingは正の整数のいくつかのシーケンスを圧縮する必要があります。これらのシーケンスの特徴は、後で表示される数値が最近表示されたばかりの数値である可能性が高いことです。この特別なシーケンスでは、Xiao Mingがシーケンスを変換して、数値の値を減らします。

変換プロセスは次のとおりです。
左から右へのシーケンスを列挙し、それぞれが番号を列挙します。番号が以前に表示されていない場合は、番号を反対の番号に変換します。番号が表示されている場合は、の最後の番号を確認します。元のシーケンス。1回の出現後(および現在の番号の前)に複数の番号が表示されます。元の番号をこの種類の番号に置き換えます。

たとえば、変換プロセスのシーケンス(a1、a2、a3、a4、a5)=(1、2、2、1、2)は次のとおりです
。a1:1は一度も出現したことがないため、a1は-1になります
。a2:2表示されないのでa2は-2になります;
a3:2が表示され、最後は元のシーケンスのa2です。a2の後とa3の前に0種類の番号があるため、a3は0になります;
a4:1が表示されます。前回がオリジナルa1のシーケンスでは、a1の後とa4の前に1種類の番号があるため、a4は1になります
。a5:2が出現し、前回は元のシーケンスのa3であり、1があります。 a3の後とa5の前の番号のタイプなので、a5は1になります。
ここで、元のシーケンスが与えられた場合、この変換規則に従って変換されたシーケンスは何ですか。

入力形式:入力の
最初の行には、シーケンスの長さを表す整数nが含まれています。
2行目には、入力シーケンスを表すn個の正の整数が含まれています。

出力形式:
変換されたシーケンスを表すn個の数値を含む1行を出力します

たとえば、次のように入力します
。51
2 2 1 2

プログラムは次のように出力する必要があります:
-1 -2 0 1 1

別の例として、次のように入力します
。121
1 2 3 2 3 1 2 2 2 3 1

プログラムは次のように出力する必要があります:
-1 0 -2 -3 1 1 2 2 0 0 2 2

データのスケールと規則
30%のデータの
場合、n <= 1000、50%のデータの場合、n <= 30000、100
%のデータの場合、1 <= n <= 100000、1 <= ai <= 10 ^ 9

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

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

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



おすすめ

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