復号解題ノードを学習します.js

16199 ワード

JavaScriptに対する理解はまだ十分ではありません。


10年前に習ったこともあるし、アルゴリズムの授業も受けたこともあるので、授業が終わるのを見て、グーグルで問題を解きたいと思っていましたが、標準コードに合ったコードを書くのは不可能でした.例えば,最下層の2798からどのように解決すべきかは分かっていたが,JavaScriptの文法,関数,メソッドに関する知識がないため,inputからブロックされていた.なぜinput[0]と書くのか、なぜ(「fs」)が必要なのか、なぜinputを宣言するのか、なぜそんなに多くの方法でフィルタリングするのか、など...だから結局入力を受け入れることをあきらめて、自分で数字を割り当てる方法で問題を解決して、3つの問題だけを解いて、日曜日の午前中に過ぎました.
結論:JavaScriptの基礎知識を読み、クローン符号化を行うことで、まず関数、方法、文法を理解し、熟知しなければならない.

百駿1000号A+B

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split(' ');
let a = parseInt(input[0]);
let b = parseInt(input[1]);
console.log(a+b);

白駿1010号架橋

function rand(min, max) { //N,M에 할당하기 위한 무작위 숫자를 위해 함수 선언
  return Math.floor(Math.random() * (max - min +1)) +min;
}   

let N, M, T
let B = 1 // 다리개수 인데 0으로 해놓으면 곱해도 0이니 1로 선언

T = rand(1, 10) // 테스트할 개수
console.log("T만큼 테스트, T: ", T)

for(i=0; i<T; i++){   //테스트할 개수 만큼 아래 과정 반복
  N = rand(1, 29)
  M = rand(N, 29) // 각각 N,M에 무작위 숫자 할당

  for(j=M-N+1; j<=M; j++){  // 순열을 for문으로 구현
    B = B*j
  }
  console.log("N: ", N, "M: ", M, "경우의 수: ", B)
  B=1
}
結果

白俊2798号問題。


let N, M  
let sum = []  // 여기까지 변수 선언

function rand(min, max) {
  return Math.floor(Math.random() * (max - min +1)) +min;
}   // N,M, 카드 숫자에 할당할 값을 무작위로 주기는데 최소, 최대값 사이에서 무작위로 할당되야 하므로 그에 대한 함수 선언

N = rand(3, 100)
M = rand(10, 300000)
let card = new Array(N) // 카드개수가 N개 이므로 카드숫자가 들어갈 배열N개 선언 

for(i=0; i<N; i++) {
  card[i] = rand(1, 100000)
  console.log("카드에 쓰여있는 수: ", card[i])
}   // 카드 N개에 1부터 100000까지 무작위로 숫자 할당

for(i=0; i<N-2; i++) {
  for(j=1; i<N-1; i++){
    for(k=2; i<N; i++){
      if(M<card[i] + card[j] + card[k]){
        continue
      }
      else{
        sum.push(card[i]+card[j]+card[k]);
      }
    }
  }
}   // 카드 3개 숫자의 합이 M보다 작으면 배열sum에 하나씩 쌓으며 할당.

sum.sort((a,b) => a-b)    // 각 값을 오름차순으로 정렬
console.log("N: ", N)
console.log("N: ", M)
console.log("nearbyM: ", sum[sum.length-1]) // 정렬한 값중에 제일 큰 값이 배열 맨 끝에 있을 것이므로 제일 끝에있는 값 출력세요
結果(カードに書かれている数が多すぎて切断されています)

Mより小さい3つの和がないので、たまにUndefinedが現れます.