首頁  >  文章  >  後端開發  >  2, 3, 5, 7組成的數字中,n的位置是多少?

2, 3, 5, 7組成的數字中,n的位置是多少?

WBOY
WBOY轉載
2023-08-27 13:53:101348瀏覽

2, 3, 5, 7组成的数字中,n的位置是多少?

問題陳述包括列印 n 在由 2、3、5 和 7 組成的數字中的位置,其中 n 可以是使用者給出的任何正數。

由 2、3、5 和 7 組成的數字意味著這將是嚴格遞增的數字序列,僅包含數字 2、3、5 或 7,即前四個質數。序列的前幾個數字,其中所有數字都只有2,3,5 和7,因為它們的數字是2, 3, 5, 7, 22, 23, 25, 27, 32, 33, 35, 37,等等。

基本上,序列中的每個數字都是由這 4 個數字(即 2、3、5 或 7)組合而成,並且序列按升序排列。

在這個問題中,我們將給出一個數字N,它的數字只有2、3、5 和7,我們需要找出給定數字在序列中的位置並列印它,這將是所需的數位輸出。

讓我們透過下面的範例來更好地理解這個問題。

INPUT : N=33</p><p>OUTPUT : 10

解釋 - 輸入中僅包含 2、3、5 或 7 的給定數字為 33。在只有數字為2、3、5或7的數字序列中,33的位置是第10位。因此,我們的輸出是 10。

INPUT : 52</p><p>OUTPUT : 13

解釋 - 輸入中的數字是 52。當我們遵循序列中的模式時,每個數字都有 2、3、5 或 7 作為其數字,並且序列嚴格按遞增順序排列,我們在第 13 位找到 52。因此我們所需的輸出為 13。

讓我們了解直接找出給定數字的位置而不創建整個序列的演算法。

演算法

如果我們觀察數字只有 2、3、5 或 7 的數字序列,我們會發現我們只能形成 4 種具有特定數字的數字組合。我們將使用這個邏輯來計算出任意給定數字 N 的位置。

前四個數字的位置如下:

2:第一名

3:第二名

5:第三名

7:第四名

由於序列是按升序排列的,因此接下來的四個數字將是第一個數字為 2 的 2 位數字,因為我們只能用特定的數字組成 4 個數字。

我們可以透過將左邊第一個數字的位置乘以 4 並加上該特定數字的位置來找到任意位數的數字的位置。

例如,N=52

初始位置將為 0。

從左邊的數字開始,序列中5的位置將是位置*4 5的位置,即0*4 3=3。現在位置為 3。

下一個數字是 2,因此數字的位置將為 3*4 1,因為目前位置是 3 乘以 4,加上目前數字的位置得到位置 13,即數字的位置序列中有 52 個。

為了解決這個問題,我們只需將位置初始化為 0。然後繼續檢查每個數字,直到數字的最後一位,並相應地更新位置 -

對於數字 2,位置將為位置*4 1。

對於數字 3,位置將為位置*4 2。

對於數字 5,位置將為位置*4 3。

對於數字 7,位置將為位置*4 4。

我們透過乘以 4 來更新位置,因為對於每個可能的數字,我們只能做出 4 種組合。所以每次將位置乘以4並加上目前數字的位置,我們就可以得到數字N的位置,其數字只有2、3、5或7。

我們將在我們的方法中使用此演算法,以便有效地解決問題。

方法

在我們的方法中實作演算法以列印僅由 2、3、5 或 7 組成的數字 N 的位置時應遵循的步驟 -

  • 我們將建立一個函數來取得給定數字的位置,其數字僅為 2、3、5 或 7。

  • 我們將以字串的形式取得輸入數字 N。

  • 因此,從 i=0 到 i

  • 對於第一種情況,如果第 i 個數字是 2,我們將該位置乘以 4 和 1,因為 1 是 2 的位置。類似地,我們將使用公式計算直到 i 位置的數字的位置根據演算法部分討論的第 i 位數字。

  • 每次迭代,根據目前第i位的數字不斷更新位置。

  • 當我們完成整個字串的迭代後,返回儲存在該位置的值,這就是我們需要的輸出。

範例

該方法的 C 程式碼:

#include <bits/stdc++.h>
using namespace std;

//to find the position of the number with only 2,3,5 or 7 as its digits
int position(string N){

   int p=0; //to store the position of the number

   //iterating in a for loop to calculate the position
   for(int i=0;i<N.size();i++){

      if(N[i]=='2'){ 
         //if the digit is 2
         p = p * 4 + 1; 
         //multiplying the position by 4 and adding the position of the digit
      }
      else if(N[i]=='3'){ 
         // if the digit is 3
         p = p * 4 + 2;
      }
      else if(N[i]=='5'){ 
         //if the digit is 5
         p = p * 4 + 3;
      }
      else{ // for the case when digit is 7
         p = p * 4 + 4;
      }
   }

   return p; //return the position of the number N

}
using namespace std;

int main() {
   string N;
   N = "2357";
   //calling the function
   cout<<"The position of "<<N<<" in the sequence is : "<<position(N)<<endl;

   N = "3327";
   cout<<"The position of "<<N<<" in the sequence is : "<<position(N)<<endl;

   return 0;
}

輸出

The position of 2357 in the sequence is : 112
The position of 3327 in the sequence is : 168

時間複雜度 - O(n) ,其中n 是字串的長度或數字中的位數,因為我們在for 迴圈中迭代n 次以計算給定的位置序列中的數字

空間複雜度 - O(1),因為我們沒有使用任何額外的空間來解決問題。

結論

本文討論了在數字為2、3、5 或7 的數字序列中查找數字N 的位置的演算法,我們在我們的方法中實現了該演算法以解決該問題在O(n) 時間內高效地使用C ,無需使用任何額外空間。

我希望讀完這篇文章後您能夠理解這個問題以及用 C 解決這個問題的方法。

以上是2, 3, 5, 7組成的數字中,n的位置是多少?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除