DPメニュー【2項間漸化式・特殊な2項間漸化式・3項間漸化式 各 1 〜 2】
【2項間漸化式 1】コード
reader.on('close', () => {
const [x, d, k] = lines[0].split(' ').map(Number);
const a = [x]; // 要素数 k 個の配列
for (let i = 1; i < k; i++) {
a[i] = a[i - 1] + d; // 値が d ずつ増加
}
console.log(a[k - 1]); // k 番目の値を出力
});
a は値が d ずつ増加する 要素数が k 個の 配列 ですね。
【2項間漸化式 2】コード
reader.on('close', () => {
const [x, d] = lines[0].split(' ').map(Number);
const Q = Number(lines[1]);
const a = [x]; // 要素数 1000個の配列
for (let i = 1; i < 1000; i++) {
a[i] = a[i - 1] + d; // 値が d ずつ増加
}
for (let i = 2; i < Q + 2; i++) {
const k = lines[i]-1;
console.log(a[k]); // k 番目の値を出力
}
});
要素数 1000 個の配列の値を漸化式で求めて a[k] の値を出力しています。
【特殊な2項間漸化式 1】コード
reader.on('close', () => {
const [x, d1, d2, k] = lines[0].split(' ').map(Number);
const a = [x]; // 要素数 1000個の配列
for (let i = 1; i < k; i++) {
i % 2 ? a[i] = a[i - 1] + d2 : a[i] = a[i - 1] + d1; // a の要素の計算
}
console.log(a[k - 1]); // k 番目の値を出力
});
a は値が d1 または d2 ずつ増加する 要素数が k 個の 配列 ですね。
【特殊な2項間漸化式 2】コード
reader.on('close', () => {
const [x, d1, d2] = lines[0].split(' ').map(Number);
const Q = Number(lines[1]);
const a = [x]; // 要素数 1000個の配列
for (let i = 1; i < 1000; i++) {
i % 2 ? a[i] = a[i - 1] + d2 : a[i] = a[i - 1] + d1; // a の要素の計算
}
for (let i = 2; i < Q + 2; i++) {
const k = lines[i]-1;
console.log(a[k]); // k 番目の値を出力
}
});
要素数 1000 個の配列の値を漸化式で求めて a[k] の値を出力しています。
【3項間漸化式 1】コード
reader.on('close', () => {
const k = Number(lines[0]);
const a = [1, 1]; // 要素数 1000個のフィボナッチ数列
for (let i = 2; i < k; i++) {
a[i] = a[i - 2] + a[i - 1]; // フィボナッチ数列の計算
}
console.log(a[k - 1]); // k 番目の値を出力
});
a[i]
の値は a[i - 2] + a[i - 1]
になっています。これは フィボナッチ数列と呼ばれる有名な数列
だそうです。
【3項間漸化式 2】コード
reader.on('close', () => {
const Q = Number(lines[0]);
const a = [1, 1]; // 要素数 1000個のフィボナッチ数列
for (let i = 2; i < 40; i++) {
a[i] = a[i - 2] + a[i - 1]; // フィボナッチ数列の計算
}
for (let i = 1; i <= Q; i++) {
const k = lines[i] - 1;
console.log(a[k]); // k 番目の値を出力
}
});
要素数 40 個の フィボナッチ数列 を漸化式で求めて a[k] の値を出力しています。
コメント