C++
 Computer >> コンピューター >  >> プログラミング >> C++

数字を削除した後にx番目の要素を見つけるC++コード

2つの整数 n と x が与えられているとします。黒板には最初の n 個の自然数(1 から n まで)が書かれています。i 番目(i は 1 から開始)の操作では、黒板に残っている数列のうち i 番目の数を削除していきます。そして、残りの数が i 個未満になった時点で削除作業を停止します。このとき、最終的に残った数列の x 番目の数を求めるのが問題です。

例えば、入力が n = 69、x = 6 の場合、出力は 12 になります。最初の操作では i = 1 なので 1 を削除します。続く2番目の操作では i = 2 ですが、この時点で数列は 2, 3, 4, … となっているため、2番目の数である 3 を削除します。同様に操作を繰り返すと、最終的に残る数列の 6 番目の数は 12 になります。

解法のポイント

この操作を順に追うと、1番目、2番目、3番目…と順番に削除していくため、結果として奇数(1, 3, 5, …)が先にすべて取り除かれることになります。十分に大きな n に対しては、削除が停止するまでにすべての奇数が消えるため、最終的に残るのは偶数のみです。

したがって、残った数列の x 番目の要素は「x 番目の偶数」、すなわち 2 × x となります。

手順

この問題を解くために、以下の手順に従います。

return 2 * x

実装例

理解を深めるために、以下の実装を見てみましょう。

#include <bits/stdc++.h>
using namespace std;
int solve(int n, int x){
    return 2 * x;
}
int main(){
    int n = 69;
    int x = 6;
    cout << solve(n, x) << endl;
}

入力

69, 6

出力

12
  1. 【C++】昇順ソート済みの連続数列から欠落している要素を二分探索で効率的に見つける方法

    概要 互いに異なる n 個の整数が格納された配列 array[] が与えられます。要素は昇順に並んでいますが、そのうち1つだけが欠落しています。この記事では、その欠落要素を効率よく特定するアルゴリズムを、原理からサンプルコードまでわかりやすく解説します。 入出力例 例1:欠落要素がある場合 入力: array[] = {1, 2, 3, 4, 5, 6, 7, 9} 出力: 8 例2:負の数を含む場合 入力: array[] = {-4, -2, -1, 0, 1, 2} 出力: -3 例3:欠落要素がない場合 入力: array[] = {1, 2, 3, 4} 出力: -1 すべて

  2. C++で1つおきの要素を削除した後、最後に残る要素を求めるアルゴリズム

    問題の概要 1からnまでの整数が格納された循環配列を考えます。最初の要素から数え始め、2つおきに要素を削除していったとき、最後に残る要素を求めるのがこの問題です。例えば、入力が5の場合、配列は [1, 2, 3, 4, 5] となります。1から開始して2つおきに削除を進めると、配列の状態は以下のように変化します。 1 0 3 4 5 1 0 3 0 5 0 0 3 0 5 0 0 3 0 0 この結果、最後まで残る要素は 3 であることがわかります。 再帰を使った解法 この問題は、再帰的な漸化式を用いることで効率的に解くことができます。 まず、nが偶数の場合を考えてみましょう。1周目で 2,