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

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

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


質問1:練炭の数

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

練炭の総数を表す数字を入力してください。
トピック分析
トピックコード



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

タイトルの説明
ある人は、ある年から毎年誕生日会を開いており、そのたびに年齢と同じ数のろうそくを吹き消しています。
今数えて、彼は合計236本のろうそくを吹き消しました。
すみません、彼は何歳で誕生日パーティーを始めましたか?
彼が誕生日パーティーを始めた年齢を記入してください。
注:送信する内容は整数である必要があり、余分なコンテンツや説明テキストを入力しないでください。
トピック分析
トピックコード



質問3:式を作る

タイトル説明

     B DEF 
A + --- + ------- = 10 
     C REC
     

(表示に問題がある場合は、[図1.jpg]を参照してください)

この式では、A〜Iは1から9までの数字を表し、異なる文字は異なる数字を表します。

例:
6 + 8/3 + 952/714は1つのソリューションであり、
5 + 3/1 +972/486は別のソリューションです。

この式にはいくつの解がありますか?

注:提出物は整数である必要があり、余分なコンテンツや説明テキストを入力しないでください。
トピック分析
トピックコード



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:四角に記入してください

トピックの説明
次のように10グリッド
ここに画像の説明を挿入

(表示に問題がある場合は、[図1.jpg]も参照してください)

0から9までの数字を入力してください。要件:2つの連続した番号を隣接させることはできません。
(左と右、上と下、および対角線はすべて隣接していると見なされます)

可能な充填スキームはいくつありますか?

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



質問7:切手を切る

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

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

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

図1-3順番に
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

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



質問8:4平方和

タイトルの説明
ラグランジアン定理としても知られる4つの平方和定理:
各正の整数は、最大4つの正の整数の2乗の合計として表すことができます。
0を含めると、4つの数値の2乗の合計として表すことができます。

例:
5 = 0 ^ 2 + 0 ^ 2 + 1 ^ 2 + 2 ^ 2
7 = 1 ^ 2 + 1 ^ 2 + 1 ^ 2 + 2 ^ 2
(^記号は電力を意味します)

与えられた正の整数に対して、二乗和の複数の表現が存在する可能性があります。
次の4つの数値を並べ替える必要があります:
0 <= a <= b <= c <= d
可能なすべての表現を、ジョイント主キーとしてa、b、c、dの昇順で並べ、最後に最初の表現を出力します。

プログラム入力は正の整数N(N <5000000)で
あり、4つの非負の整数を出力し、小さいものから大きいものへと並べ替え、スペースで区切る必要があります。

たとえば、入力:
5
、プログラムは出力する必要があります:
0 0 1 2

別の例として、入力:
12
、プログラムは出力する必要があります:
0 2 2 2

別の例として、入力:
773535
、プログラムは次のように出力する必要があります:
1 1 267 838

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



質問9:ボールを取るゲーム

タイトル説明
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
質問分析
質問コード



質問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
質問分析
質問コード



おすすめ

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