Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++를 사용하여 홀수 숫자로만 구성된 N번째 숫자 찾기

<시간/>

C++에는 수학적 문제를 해결하기 위한 방대한 함수 목록이 있습니다. 수학 함수 중 하나는 코드를 사용하여 N번째 홀수 자리를 찾는 것입니다. 이 기사에서는 홀수 N번째 숫자를 찾는 완전한 접근 방식을 설명하고 홀수가 무엇이며 홀수로 구성된 숫자를 이해합니다.

홀수 숫자로만 구성된 N번째 숫자 찾기

홀수는 2로 나눈 나머지를 제공하므로 처음 몇 개의 홀수는 1,3,5,7,9,11,13,15,17,19...

필요한 수를 찾기 위해 여기에 두 가지 접근 방식이 있습니다 -

접근법 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를 초기화하고 답변을 저장하기 위해 as를 초기화합니다. 또한 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번째 홀수를 찾는 방법과 우리는 그렇게 하는 두 가지 접근 방식을 찾았습니다. 첫 번째 접근 방식은 각 숫자를 확인하고 짝수는 건너뛰는 방식으로 이해하기 쉬웠지만 계산에 시간이 걸렸다.

두 번째 접근 방식은 대기열을 사용하고 그 안에 홀수를 저장하고 위에서 본 공식으로 다음 가능한 숫자를 찾는 것입니다. 이 접근 방식의 복잡성은 O(n)입니다.

우리는 C++로 프로그램을 만들어 홀수 숫자로만 구성된 N번째 숫자를 찾았습니다. C, python, Java 또는 기타 프로그래밍 언어와 같은 다른 언어로 이 프로그램을 수행할 수 있습니다. 이 문서가 문제 해결 방법에 대한 완전한 지식을 제공하므로 도움이 되었기를 바랍니다.