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

C++에서 짝수와 홀수의 합이 1인 모든 n자리 숫자를 인쇄합니다.


이 문제에서는 정수 n이 주어지고 짝수 자리와 홀수 자리에 있는 숫자의 합 사이의 절대 차이가 되도록 모든 n자리 숫자를 인쇄해야 합니다. is 1. 생성하는 동안 0 앞에 오는 숫자는 고려되지 않습니다.

절대적 차이 값이 절대 값(양수 값)인 두 숫자의 차이입니다.

문제를 이해하기 위해 예를 들어 보겠습니다 -

Input: n = 2
Output: 10 12 21 23 32 34 43 45 54 56 65 67 76 78 87 89 98
Explaination : taking an of the numbers from the output,
54, even digit - odd digit = 5 - 4 = 1
89, even digit - odd digit = 8 - 9 = -1 , |-1| = 1.

이 문제를 해결하려면 차이가 1 또는 -1인 모든 n자리 숫자를 찾아야 합니다. 이를 위해 우리는 모든 값으로 한 자리 자리를 고정하고 그 위치가 짝수 또는 홀수임을 기반으로 조건이 충족되도록 숫자의 다른 자리에서 값을 호출합니다.

예시

아래 프로그램은 우리의 솔루션을 설명합니다 -

#include <iostream>
using namespace std;
void printNumber(int n, char* out, int index, int evenSum, int oddSum){
   if (index > n)
      return;
   if (index == n){
      if (abs(evenSum - oddSum) == 1) {
         out[index] = ' ';
         cout << out << " ";
      }
      return;
   }
   if (index & 1) {
      for (int i = 0; i <= 9; i++) {
         out[index] = i + '0';
         printNumber(n, out, index + 1, evenSum, oddSum + i);
      }
   } else {
      for (int i = 0; i <= 9; i++) {
         out[index] = i + '0';
         printNumber(n, out, index + 1, evenSum + i, oddSum);
      }
   }
}
int findNumberWithDifferenceOne(int n) {
   char out[n + 1];
   int index = 0;
   int evenSum = 0, oddSum = 0;
   for (int i = 1; i <= 9; i++) {
      out[index] = i + '0';
      printNumber(n, out, index + 1, evenSum + i, oddSum);
   }
}
int main() {
   int n = 3;
   cout<<n<<" digit numbers with absolute difference 1 : \n";
   findNumberWithDifferenceOne(n);
   return 0;
}

출력

3 digit number with absolute difference 1 −
100 111 120 122 131 133 142 144 153 155 164 166 175 177 186 188 
197 199 210 221 230 232 241 243 252 254 263 265 274 276 285 287 
296 298 320 331 340 342 351 353 362 364 373 375 384 386 395 397 
430 441 450 452 461 463 472 474 483 485 494 496 540 551 560 562 
571 573 582 584 593 595 650 661 670 672 681 683 692 694 760 771 
780 782 791 793 870 881 890 892 980 991