34日目-2022.04.03
今日の勉強の内容
Baekjoonで問題を解く
1)質問:年が指定されている場合は、年出力1または0のプログラムを作成します.閏年は年が4の倍数で、100の倍数や400の倍数ではありません.
(年が1以上、4000以下の自然数)
きのう解いた問題のもう一つの解法
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');
let a = Math.floor(parseInt(input[0]));
if (a>=1 && a <=4000) {
if ((a % 4==0)&&(a % 100 !=0)) {
console.log(1);
} else if((a % 4==0)&&(a % 400==0)){
console.log(1);
} else {
console.log(0);
}
}
2)問題:(1)と(2)の位置の3桁の自然数が与えられた場合、(3)、(4)、(5)、(6)の位置の値を求めるプログラムを作成します.
1行目には(1)位置の3桁の自然数、2行目には(2)位置の3桁の自然数が与えられる.(3)、(4)、(5)、(6)の値を1行目から4行目に順次出力します.
苦悩の過程.
(1)と(2)に入り、自然数なので、Math.floorを使用して小数点/(4)、(5)に10100を乗じ、(3)を3つ加えて(6)、/(1)、(2)を3桁にし、100~999の範囲を指定/結果値を1行ではなく4行に分け、出力n利用/
(2)の各値に(1)を乗算する方法を考えます.
に答える
1.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
let A = Math.floor(parseInt(input[0]));
let B = Math.floor(parseInt(input[1]));
let a = A * (B%10);
let b = A * ((B%100)-(B%10)) /10 ;
let c = A * Math.floor(B/100);
let d = A * B;
if (A>=100 && A<=999 && B>=100 && B<=999) {
console.log(`${a}\n${b}\n${c}\n${d}`);
}
let A = Math.floor(parseInt(input[0]));
let B = Math.floor(parseInt(input[1]));
let a = A * (B%10);
let b = A * Math.floor((B%100) /10) ;
let c = A * Math.floor(B/100);
let d = a + 10*b + 100*c ;
if (A>=100 && A<=999 && B>=100 && B<=999) {
console.log(`${a}\n${b}\n${c}\n${d}`);
}
b,dの内容は上記のように変化することができる整理:書いたようですが、答えが間違っていて、問題の入力が1行ではなく2行であることを確認するのに長い時間がかかりました.
fsモジュールの使用方法を参照し、スペースで区切られた1行の値を入力すると分割(")
複数行の値を入力すると、split("n")であることを覚えているので、split("n")を適用すると正解が得られます.
string = " a b c d";
split()のようなパラメータがない場合はstringです.split = ['a','b','c','d']
string.split("")=[","a","","","b","c","d"]スペース
3)問題:
例えば、座標が(12,5)の点A、x座標およびy座標はいずれも正の値であり、第1象限に属する.点Bのx座標は負数、y座標は正の値であり、第2象限に属する.
点の座標を入力し、その点がどの象限に属するかを決定するプログラムを作成します.ただし,x座標とy座標はいずれも正数または負数であると仮定する.
最初の行は整数xを与える.(−1000 ≤ x ≤ 1000; x ≠ 0)
次の行は整数yを与えます.(−1000 ≤ y ≤ 1000; y ≠ 0)
出力点(x,y)の象限番号(1,2,3,4のいずれか).
苦悩の過程.
2行に入力する必要があるのでsplit("n"),/x,yは整数/x,yの範囲はif条件文である.
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split('\n');
let x = Math.floor(parseInt(input[0]));
let y = Math.floor(parseInt(input[1]));
if (x>=-1000 && x<=1000 && x!=0 && y>=-1000 && y<=1000 && y!=0) {
if (x > 0 && y > 0){
console.log(1);
} else if (x<0 && y>0) {
console.log(2);
} else if (x<0 && y<0) {
console.log(3);
} else if (x>0 && y<0) {
console.log(4);
}
}
書きましたが、初めて見た反応ミスが発生しました.エラーが検索され、アクセス権エラーが検出されました.例にはこの問題がリストされていますが、fsモジュールではなくreadlineモジュールを使用して解決する必要があります.fsモジュールメソッドは完全に理解されていませんが、readlineモジュールメソッドも完全に理解されていません.まず基本的な使い方と文法を使って解釈し、明日から詳しく勉強します.
アプリケーション
const readline = require('readline');
const rl = readline.createInterface({
input : process.stdin,
output : process.stdout,
});
let input = [];
rl.on("line",function(line) {
input.push(parseInt(line));
}).on("close", function () {
const x = Math.floor(parseInt(input[0]));
const y = Math.floor(parseInt(input[1]));
if (x>=-1000 && x<=1000 && x!=0 && y>=-1000 && y<=1000 && y!=0) {
if (x > 0 && y > 0){
console.log(1);
} else if (x<0 && y>0) {
console.log(2);
} else if (x<0 && y<0) {
console.log(3);
} else if (x>0 && y<0) {
console.log(4);
}
}
process.exit();
});
if (x>=-1000 && x<=1000 && x!=0 && y>=-1000 && y<=1000 && y!=0) {
if (x > 0) {
y > 0 ? console.log(1) : console.log(4);
} else if (x<0) {
y < 0 ? console.log(3) : console.log(2);
}
}
ドアにいたら?上記の操作を実行するにはすぐに理解できる方法ではありませんが、readlineモジュールの方法を見つけ、fsモジュールで偶然可能な方法を発見したので、
fs.readFileSync("/dev/stdin").toString().trim().split('\n');
여기서 readFileSync를
fs.readFileSync(0).toString().trim().split('\n');
으로 적용시 fs모듈로도 정답이 나옴을 확인
パスが0でFSモジュールが利用可能になった理由が理解できません後で帰って勉強します.
4)問題:尚根が設定したアラーム時刻が与えられている場合は、アラームを45分前に変換するプログラムを作成してください.
第1行は2つの整数HとMを与える.(0≦H≦23,0≦M≦59)は、現在尚根で設定されているアラーム時間HのM分を意味する.入力時間は24時間で表示されます.24時間の表現では、1日の始まりは0:0(真夜中)、終わりは23:59(翌日の真夜中の1分前).時間を表すとき、不要な0は使いません.
苦悩の過程.
M分から45を引くと、0より大きい場合はそのまま、0より小さい場合は1を引く.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');
let H = Math.floor(parseInt(input[0]));
let M = Math.floor(parseInt(input[1]));
if (H>=0 && H<=23 && M>=0 && M<=59) {
if (M-45 >=0 ){
console.log(`${H}:${M-45}`);
} else if (H>=1 && M-45 <0 ){
console.log(`${H-1}:${M+15}`);
} else if (H==0 && M-45 <0){
console.log(`23:${M+15}`);
}
}
やってみましたが、答えが間違っていました.利用する方法もあるようで、まずこの方法を使いたいのですが、なぜだめなのか悩んで、例の出力を見てみました.スペースで構成されていることがわかりました...に答える
1.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');
let H = Math.floor(parseInt(input[0]));
let M = Math.floor(parseInt(input[1]));
if (M-45 >=0 ){
console.log(`${H}` + " " + `${M-45}`);
} else if (H>=1){
console.log(`${H-1}` + " " + `${M+15}`);
} else {
console.log(23 + " " + `${M+15}`);
}
明日の学習計画
一日を振り返る
もしこのような学習方式があまり良い方法ではないならば、初心者のために伝言を残してください.
学習ソース
BaekJoon
上の内容は勉强の中で私が理解した内容で、いくつか间违った内容があるかもしれません.
灰毒中発見時の修正
Reference
この問題について(34日目-2022.04.03), 我々は、より多くの情報をここで見つけました https://velog.io/@abo7326/34일차-2022.04.03テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol