Pintia の問題解決策——7-21 運試し

7-21 運試し

原題:

サイコロには 6 つの面があり、それぞれの面に 1 ~ 6 つの点が刻まれていることがわかります。以下は 6 つのサイコロの初期状態、つまり上向きの点を示しており、サイコロを掴んで振って別の結果を生み出すことができます。サイコロを非常に上手に振って、それぞれの目の出目が次の 2 つの条件を満たしたとします。

  • 1. 各サイコロで出た数字は、前に出た数字とは異なります。
  • 2. 条件 1 が満たされるという前提の下で、各サイコロは毎回最大の得点を獲得できます。

そうすれば、 n回目に得られる結果を予測できるはずです(1≤ n ≤5)。

入力形式:

入力の最初の行は、6 つのサイコロの初期数、つまり [1,6] の間の整数を与え、数字はスペースで区切られます。2 行目は、出目の数 n (1≤ n ≤5)与えます

出力フォーマット:

n回目に振られた各サイコロの点を順番に行にリストします。数字は 1 つのスペースで区切る必要があり、行の先頭に余分なスペースがあってはなりません。

問題解決のアイデア:

  1. モジュールをインポートしreadlineてインターフェイス オブジェクトを作成します。まずreadlineモジュールを導入し、createInterfaceメソッドを使用してインターフェイス オブジェクトを作成しますrlこのオブジェクトは、入力ストリームを標準入力に設定します。
  2. 入力を読み取り、保存する:'line'イベントをリッスンすることにより、入力は配列に保存されますbuf
  3. 入力を解析して一連の数値を処理します。buf配列の最初の要素 (つまり、インデックス 0 の位置) を変数に割り当てarr、それをスペースに基づいて文字列の配列に分割し、mapメソッドを使用してそれぞれを変換します。文字列を数値に変換します。配列bufの 2 番目の要素を変数に代入しn、整数型に変換します。
  4. 結果の配列を初期化します。6 つの 6 の配列をres初期結果として変数に割り当てます。
  5. 結果配列を更新します: 入力された数値シーケンスを走査しますarr。現在の要素が、対応する位置にある結果配列の要素と等しい場合は、結果配列の対応する位置にある要素を 1 だけデクリメントします。
  6. 結果配列を更新するループ: 2 つのネストされたループを使用します。外側のループは 0 から に進みn-1、内側のループは結果配列を走査して各要素を 1 ずつ減分し、結果配列の対応する位置にある要素が に対応するかどうかを確認します。入力された数値シーケンス。の要素は等しい。それらが等しい場合、結果の配列の対応する位置の要素が 1 ずつ減分される。
  7. str出力文字列を構築します。結果文字列のコンテナとして変数を使用し、結果配列を走査しres、スペースで区切られた各要素を連結しますstr
  8. 出力結果:console.log先頭と末尾のスペースを削除した結果文字列を出力するために使用します。

JavaScript (ノード) コード:

const readline = require('readline');
const rl = readline.createInterface({
    
    
    input: process.stdin
});
let buf = [];

rl.on('line', (input) => {
    
    
    buf.push(input);
});

rl.on('close', () => {
    
    
    let arr = buf[0].split(" ").map(Number)
    let n = parseInt(buf[1])
    const res = [6, 6, 6, 6, 6, 6]

    for (let i = 0; i < arr.length; i++) {
    
    
        if (arr[i] == res[i]) {
    
    
            res[i]--
        }
    }
    for (let i = 0; i < n - 1; i++) {
    
    
        for (let j = 0; j < arr.length; j++) {
    
    
            res[j]--
            if (res[j] == arr[j]) {
    
    
                res[j]--
            }
        }
    }

   let str = ""
    for (let i of res) {
    
    
        str += i + " "
    }
    console.log(str.trim());
  
});

複雑さの分析:

時間計算量: O(n)
空間の複雑さ: O(n)

おすすめ

転載: blog.csdn.net/Mredust/article/details/133519692