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

C++で与えられた数Nの約数で最大の良い数を見つけます


この問題では、数Nが与えられます。私たちのタスクは、与えられた数Nの約数で最大の適切な数を見つけることです。 。

かなりの数 は、すべての桁がその右側の桁の合計よりも大きい数値です(すべての桁数がそれよりも小さい)。たとえば、732は適切な数値であり、7> 3+2および3>2です。

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

Input : N = 15
Output : 15

説明

Divisors of 15 : 1, 3, 5, 15.

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

この問題の簡単な解決策は、Nのすべての約数を見つけることです。そして、その数のすべての素数の約数の積として抽出される最大の良い数を見つけます。

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

#include <bits/stdc++.h>
using namespace std;
int findLargestGoodNumber(int n){
   vector<int> primeFactors;
   int x = n;
   for (int i = 2; i * i <= n; i++) {
      if (x % i == 0) {
         primeFactors.push_back(i);
         while (x % i == 0) 
            x /= i;
      }
   }
   if (x > 1) 
      primeFactors.push_back(x);
   int goodNumber = 1;
   for (int i = 0; i < primeFactors.size(); i++)
      goodNumber = goodNumber * primeFactors[i];
   return goodNumber;
}
int main(){
   int n = 28;
   cout<<"The largest good Number in divisor of "<<n<<" is "<<findLargestGoodNumber(n); 
   return 0;
}

The largest good Number in divisor of 28 is 14

  1. C++で指定された数字で形成できる最大の数を見つけます

    数字の配列があるとします。配列のすべての桁を使用して取得できる最大数を見つける必要があります。したがって、配列が[3、3、9、6、2、5]のような場合、最大数は965332になります。 この問題から、数字を昇順ではなく簡単に並べ替えてから印刷できることがわかります。しかし、より効率的な方法でこれを解決できます。サイズ10の配列を1つ作成して各桁の頻度を格納し、それに応じて9から0までの数値を出力できます。 例 #include <iostream> #include <string> using namespace std; int maxNumFromNum(int

  2. 与えられた文字列の順列の数を見つけるためのC++プログラム

    文字列の文字をさまざまな順序で並べることができます。ここでは、特定の文字列から形成できる順列の数をカウントする方法を説明します。 1つの文字列が「abc」の場合はわかります。 3つの文字があります。 3つにアレンジできます! =6つの異なる方法。したがって、n文字の文字列は、nに配置できます。違う方法。しかし、aabのように同じ文字が複数回存在する場合、6つの順列はありません。 aba aab baa baa aab aba ここで、(1,6)、(2、5)、(3,4)は同じです。したがって、ここでは順列の数は3です。これは基本的に(n!)/(複数回発生しているす