C / C ++で番号をダイヤルするために使用できる文字列のすべての組み合わせ?
特定の番号に関して、次の仕様を使用して、電話で特定の番号にダイヤルするために実装できる文字列のすべての可能な組み合わせを表示または印刷します。
-
指定された電話で、ダイヤルできます
-
2AまたはBまたはCの実装
-
3DまたはEまたはFの実装
-
………………。
-
8TまたはUまたはVの実装
-
9WまたはXまたはYまたはZの実装
-
11つだけを実装
-
0実装0。
たとえば、89が指定された電話番号である場合、プログラムは印刷する必要があります
TW、TX、TY、TZ、UW、UX、UY、UZ、VW、VX、VY、VZ
#include <stdio.h> #include <string.h> // TableHash[i] stores all characters that correspond to digit i in phone const char TableHash[10][5] = {"", "", "WXYZ", "TUV", "PQRS", "MNO", "GHI", "GHI", "DEF", "ABC"}; // A recursive function to display or print all possible words that can be obtained by implementing input number1[] of size n1. The output words are one by one stored in output1[] void UtilWordsPrint(int number1[], int curr_digit1, char output1[], int n1) { // In the Base case, if current output word is prepared int i; if (curr_digit1 == n1) { printf("%s ", output1); return ; } // We try all 3 possible characters for current digit in number1[] // and recur for remaining digits for (i=0; i<strlen(TableHash[number1[curr_digit1]]); i++) { output1[curr_digit1] = TableHash[number1[curr_digit1]][i]; UtilWordsPrint(number1, curr_digit1+1, output1, n1); if (number1[curr_digit1] == 0 || number1[curr_digit1] == 1) return; } } // A wrapper over UtilWordsPrint(). It is able to create an output1 array and calls UtilWordsPrint() void printWords(int number1[], int n1) { char result1[n1+1]; result1[n1] ='\0'; UtilWordsPrint(number1, 0, result1, n1); } //Driver program int main(void) { int number1[] = {2, 3, 4}; int n1 = sizeof(number1)/sizeof(number1[0]); printWords(number1, n1); return 0; }
出力
WTP WTQ WTR WTS WUP WUQ WUR WUS WVP WVQ WVR WVS XTP XTQ XTR XTS XUP XUQ XUR XUS XVP XVQ XVR XVS YTP YTQ YTR YTS YUP YUQ YUR YUS YVP YVQ YVR YVS ZTP ZTQ ZTR ZTS ZUP ZUQ ZUR ZUS ZVP ZVQ ZVR ZVS
時間計算量:上記のコードbeO(4n)の時間計算量。ここで、nは入力番号の桁数として扱われます。
-
C ++を使用して、指定された数まで加算されるすべての組み合わせを検索します
正の数nがあるとします。正の数のすべての組み合わせを見つける必要があります。これは、その数になります。ここでは、順列ではなく、組み合わせのみが必要です。値n=4の場合、[1、1、1、1]、[1、1、2]、[2、2]、[1、3]、[4]になります。 これは再帰を使用して解決します。組み合わせを格納する配列があり、再帰的アプローチを使用してその配列を埋めます。各組み合わせは、要素の昇順で保存されます。 例 #include<iostream> using namespace std; void getCombination(int arr[], int index, int num,
-
C++でオーバーロードできない関数
C ++では、関数をオーバーロードできます。ただし、オーバーロードが行われない場合もあります。このセクションでは、関数をオーバーロードできないさまざまなケースについて説明します。 関数のシグネチャが同じである場合、戻り値のタイプのみが異なるため、関数をオーバーロードすることはできません。 int my_func() { return 5; } char my_func() { return 'd'; } メンバー関数がクラス内で同じ名前と同じパラメーターリストを持っている場合、それらをオーバーロードすることはで