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

パンデジタル数とは何ですか。 C++を使用してパンデジタル数を見つけるためのアプローチ


パンデジタル数 −数学では、パンデジタル数は、有効数字の中に各桁が少なくとも1回は使用される整数です。

パンデジタル数は、各桁が少なくとも1回はベースとして使用される整数です。

たとえば、1245678はパンデジタル数です。

この問題を解決するためのアプローチ

  • 数値と基数を入力します。

  • ベースが2未満で10より大きいかどうかを確認してから、1を返します。それ以外の場合は、数値がパンデジタルであるかどうかを確認します。

  • 整数関数is_pandigital(long long n、int base)は、数値と基数を入力として受け取ります。

  • 番号に存在するすべての桁をカウントし、カウントをインクリメントします。

  • すべての数字を繰り返し処理して、空の数字があるかどうかを確認します。そのため、falseを返します。

  • 整数関数is_zeroless(long long n、int base)は、入力と数値、およびその基数を入力として受け取り、数字が見つかった場合に戻ります。

  • すべての数字を繰り返すと、空の数字があるかどうかがわかり、0が返されます。

  • 最後に、関数check_number(long long number、int base)は、数値とその基数を入力として受け取ります。それ以外の場合は0が見つかった場合、関数は1を返します。

#include <iostream.h>"
using namespace std;
int is_pandigital(long long number, int base);
int is_zeroless_pandigital(long long number, int base);
int check_number(long long number, int base);
int main(){
   long long number;
   int base;
   cin>>"Enter a number";
   cout<<number;
   cin>>"Enter Base";
   cout<<base;
   if(base < 2 || base > 10){
      return 1;
   }
   if(check_number(number, base)){
      if(is_pandigital(number, base)){
         cout<<number<<""<<base;
      }
      else{
         cout<< number<< "is not a pandigital number in base"<<base;
      }
      if(is_zeroless_pandigital(number, base)){
         cout<<number<< "is a zeroless pandigital number in base"<<base;
      }
      else{
         cout<<number<< "is not a zeroless pandigital number in base" <<base;
      }
   }
   else{
      cout<<number<< "is not a valid number in base"<<base;
   }
   return 0;
}
int is_pandigital(long long number, int base){
   /* define an array to store the count of all digits */
   int digits[10], i;
   memset(digits, 0, sizeof(int)*10);
   /* for every digit in number, then increment count by one */
   while(number > 0){
      int digit = number % 10;
      ++digits[digit];
      number /= 10;
   }
   /* iterate over all the digits to see if there's an empty one, if so return false */
   for(i = 0; i < base; ++i)
      if(digits[i] == 0)
         return 0;
   /* if no empty digit found, return true */
   return 1;
}
int is_zeroless_pandigital(long long number, int base){
   /* define an array to store the count of all digits */
   int digits[10], i;
   memset(digits, 0, sizeof(int)*10);
   /* for every digit in number, increment count by one */
   while(number > 0){
      int digit = number % 10;
      if(digit == 0) return 0;
         ++digits[digit];
      number /= 10;
   }
   /* iterate over digits to see if there's an empty one, if so return false */
   for(i = 1; i < base; ++i)
   if(digits[i] == 0)
      return 0;
   /* if no empty digit found, return true */
   return 1;
}
/* This function checks if given number is valid in the given base */
int check_number(long long number, int base){
   while(number > 0){
      int digit = number % 10;
      if(digit > base - 1) return 0;
         number /= 10;
   }
   return 1;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Enter a number: 45
Enter base(min:2 to max-10):10
45 is not a valid number.

  1. C++を使用して文字列の部分文字列の数を見つける

    この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &

  2. C++を使用して停止ステーションの数を見つける

    ポイントXとYの間にn個の中間駅があります。2つの駅が隣接しないように、s駅に停車するように列車を配置できるさまざまな方法の数を数えます。そのため、この記事では、停車駅の数を見つけるためのあらゆる可能なアプローチについて説明します。問題を見ると、sの駅数で列車を止めることができる組み合わせを見つける必要があることがわかります。 問題を解決するためのアプローチ 中間駅が8つあり、3つの中間駅で電車を止める方法を見つける必要がある例を見てみましょう。 n = 8, s = 3 (n-s)、つまり電車が止まらない駅が5つ残っています 電車が止まらないA、B、C、D、Eの5つの駅があります