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

C ++を使用して、奇数桁のみで構成されるN番目の数値を検索します


C ++には、数学的な問題を解決するための関数の膨大なリストがあります。数学関数の1つは、コードを使用してN番目の奇数桁を見つけることです。この記事では、奇数のN番目の数字を見つける完全なアプローチについて説明し、奇数とは何か、奇数はどの数字で構成されているかを理解します。

奇数桁のみで構成されるN番目の数字を見つける

奇数は2で割った余りを与えるので、最初のいくつかの奇数は1,3,5,7,9,11,13,15,17,19 ...

必要な数を見つけるために、ここでは2つのアプローチがあります-

アプローチ1 −奇数かどうかにかかわらず、すべての自然数をチェックし、カウントがnに等しくなるまですべての奇数をカウントし、偶数が見つかった場合はカウントしません。つまり、偶数をスキップして奇数をカウントします。見つかった必要なN番目の番号を指定します。

奇数桁で構成されるN番目の数字を見つけるこのアプローチは、すべての数字をチェックして奇数を数えるだけなので簡単ですが、コンピュータープログラミングの観点からは、このアプローチはこのタスクを完了するのにかなりの時間がかかります。

アプローチ2 −奇数で構成されるすべての数値は、最後に1,3,5,7,9を含めることができるため、奇数になります。したがって、最初にN番目の数値が1,3,5,7,9であるかどうかを確認し、そうである場合は答えを取得します。それ以外の場合は、11.13、15、17、19である他の可能な数値に移動し、21、23、25、27、29になります。これはパターンを形成します1*10+{最後の可能な数}。

Last possible numbers are 1,3,5,7,9
Next possible numbers can be found by
1 * 10 + 1 =11
1 * 10 + 3 = 13
1 * 10 + 5 = 15
1 * 10 + 7 = 17
1* 10 + 9 = 19
i.e 11,13,15,17,19

サンプルコード

まず、コードがどのように見えるかを見てみましょう-

#include<bits/stdc++.h>
using namespace std;
int main(){
    queue<int> q;
    int cnt = 0, ans = 0;
    int n;
    cin >> n;
    int a[5]={1,3,5,7,9};
    for(int i = 0; i < 5;i++){
        cnt++;
        if(cnt == n)
            ans = a[i];
        q.push(a[i]);
    }
    if(ans)
        cout << ans << "\n";
    else{
        while(true){
            int x = q.front();
            q.pop();
            for(int j = 0; j < 5; j++) {
                int temp = x * 10 + a[j];
                q.push(temp);
                cnt++;
                if(cnt == n)
                    ans = temp;
            }
            if(ans)
                break;
        }
        cout << ans << "\n";
    }
    return 0;
}

出力

9

(入力として5を指定すると、出力として9が取得されます)

上記のコードは、奇数桁のみで構成されるN番目の数値を検索するC++コードです。このコードを理解するために、このコードを分割し、コードの各部分を理解して完全なコードを理解しましょう。

コードの説明

ステップ1 −ユーザーからnを取得し、必要な変数を初期化します。

int main() {
   queue<int> q;
   int cnt = 0, ans = 0;
   int n;
   cin >> n;
   int a[5]={1,3,5,7,9};

ここでは、キューを作成し、変数cntを初期化してカウントを保持し、ansを初期化して回答を保存します。また、cinを使用してユーザーから入力を受け取り、最初の可能な数値で配列を初期化します。

ステップ2 − N番目の番号が最初の可能な番号にあるかどうかを確認し、それらの番号をキューに保存します。

for(int i = 0; i < 5;i++){
   cnt++;
   if(cnt == n)
      ans = a[i];
      q.push(a[i]);
   }
   if(ans)
      cout << ans << "\n";

上記のコードでは、N番目の番号が最初の可能な番号で使用可能かどうかを確認し、配列に格納され、配列に番号が存在するキューをプッシュし、N番目の番号が最初の可能な番号で見つかった場合に出力を提供します。

ステップ3 −次の可能な番号からN番目の番号を見つけ、N番目の番号が見つからない場合は、キュー内の番号を変更します。

while(true) {
   int x = q.front();
   q.pop();
   for(int j = 0; j < 5; j++) {
      int temp = x * 10 + a[j];
      q.push(temp);
      cnt++;
      if(cnt == n)
         ans = temp;
      }
      if(ans)
         break;
   }
   cout << ans << "\n";
}

最後に、キューからすべての数値を取り出し、式{x * 10 +最後の奇数}を使用して次の可能な数値を作成し、cntの値がnに等しくなるかどうかを確認します。

結論

この記事では、問題がありました。奇数桁のみで構成されるN番目の奇数を見つける方法と、そのための2つのアプローチを見つけました。最初のアプローチは、各数値をチェックして偶数をスキップするだけなので理解しやすいものでしたが、計算に時間がかかりました。

2番目のアプローチは、キューを使用してその中に奇数を格納し、数式を使用して次に可能な数を見つけることでした。このアプローチの複雑さはO(n)です。

C ++でプログラムを作成し、奇数桁のみで構成されるN番目の数字を検索しました。このプログラムは、C、python、java、またはその他のプログラミング言語など、他の言語で実行できます。この記事が問題を解決するためのアプローチの完全な知識を与えるので、あなたがこの記事がお役に立てば幸いです。


  1. C++を使用して文字列の部分文字列の数を見つける

    この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &

  2. C++を使用して停止ステーションの数を見つける

    ポイントXとYの間にn個の中間駅があります。2つの駅が隣接しないように、s駅に停車するように列車を配置できるさまざまな方法の数を数えます。そのため、この記事では、停車駅の数を見つけるためのあらゆる可能なアプローチについて説明します。問題を見ると、sの駅数で列車を止めることができる組み合わせを見つける必要があることがわかります。 問題を解決するためのアプローチ 中間駅が8つあり、3つの中間駅で電車を止める方法を見つける必要がある例を見てみましょう。 n = 8, s = 3 (n-s)、つまり電車が止まらない駅が5つ残っています 電車が止まらないA、B、C、D、Eの5つの駅があります