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

C++で辞書式順序で「A」と「B」の文字列として数値を出力します


この問題では、数字Nが与えられます。私たちのタスクは、辞書式順序で「A」と「B」の文字列として数字を印刷するプログラムを作成することです。

「A」と「B」の文字列としてのすべての数値の表現は

1 =A
2 =B
3 =AA
4 =AB
5 =BA
6 =BB
7 =AAA
8 =AAB


問題を理解するために例を見てみましょう。

入力: N =12

出力: BAB

ソリューションアプローチ

「A」と「B」の文字列は2進数に似ています。文字列を見つけるには、まず、長さ1(サイズ2まで)の数字が2つ、長さ2(サイズ6まで)の数字が4つ、長さ3(サイズまで)の数字が8つあるという事実を使用して、文字列の長さを見つけます。 14)。長さを見つけたら、文字列の文字を見つける必要があります。文字列に数字を追加しながら、残りの長さを繰り返し更新します。文字は、Nを(2 ^(残りの長さ))と比較することに基づいて決定されます。Nが現在の文字よりも小さい場合は「B」、それ以外の場合は「A」です。各反復の後、長さを1ずつ減らし、文字が「B」の場合はNを更新し、numずつ減らします。

ソリューションの動作を説明するプログラム

#include <iostream>
#include<math.h>
using namespace std;

int findStringLength(int M) {

   int stringLen = 1;
   while((pow(2, stringLen + 1) - 2) < M) {
      stringLen++;
   }
   return stringLen;
}

void printNumString(int N) {
   
   int stringLen, num, stringNumber;
   stringLen = findStringLength(N);
   stringNumber = N - (pow(2, stringLen) - 2);
   while (stringLen) {
      num = pow(2, stringLen - 1);

      if (num < stringNumber) {
         cout<<"B";
         stringNumber -= num; }
      else {
         cout<<"A";
      }
      stringLen--;
   }
}

int main() {
   int N = 47;
   cout<<"The number as sting of 'A' and 'B' in lexicographic order is ";
   printNumString(N);
   return 0;
}

出力

The number as sting of 'A' and 'B' in lexicographic order is BAAAA

  1. C++でstd::stringとintを連結する方法は?

    このプログラムでは、C++で文字列と整数型のデータを連結する方法を説明します。文字列と整数のデータを連結するには、最初に整数を文字列に変換する必要があります。それを変換するために、stringstreamを使用しています。これはいくつかの機能を提供します。数字または文字列を取り、それを文字列にします。 Input: String “str” and Number 10 Output: Concatenated string “str10” アルゴリズム Step 1: Take string and number Step 2: Convert

  2. C ++で文字列を数値に、またはその逆に変換する

    このセクションでは、文字列を数値に変換し、数値を文字列に変換する方法を説明します。最初に、文字列を数値に変換する方法を説明します。 文字列から数値への変換 ここでは、数値文字列を整数型データに変換する方法を説明します。この問題は、atoi()関数を使用して解決できます。この関数は文字列を入力として受け取り、整数データに変換します。 atoi()関数はライブラリにあります。 Input: A number string “1234” Output: 1234 アルゴリズム Step 1:Take a number string Step 2: Convert it t