C ++で2、3、および5で割り切れるN桁の指定されたセットを持つ最大数
このチュートリアルでは、2、3、および5で割り切れる配列から形成される最大数を見つけるプログラムを作成します。
問題を解決するための手順を見てみましょう。
- アレイを初期化します。
- 数値は0で終わる必要があり、すべての数値の合計は2、3、および5で割り切れるには3で割り切れる必要があります。
- 配列内の0を確認し、配列内に存在しない場合は印刷できません。
- 配列を降順で並べ替えます。
- 合計%3の余りを見つけます。
- 余りが1でない場合は、桁%3の余りが上記の余りと等しい末尾からすべての桁を削除します。
- 上記と同じ余りの桁がない場合は、上記の余りから3を引き、余りが上記と同じである最後の2桁を削除します。
- 配列からすべての数字を出力します。
例
コードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
void findLargestDivibleNumber(int n, vector<int>& v){
int flag = 0;
long long sum = 0;
for (int i = 0; i < n; i++) {
if (v[i] == 0) {
flag = 1;
}
sum += v[i];
}
if (!flag) {
cout << "Not possible" << endl;
}else {
sort(v.begin(), v.end(), greater<int>());
if (v[0] == 0) {
cout << "0" << endl;
}else {
int flag = 0;
int remainder = sum % 3;
if (remainder != 0) {
for (int i = n - 1; i >= 0; i--) {
if (v[i] % 3 == remainder) {
v.erase(v.begin() + i);
flag = 1;
break;
}
}
if (flag == 0) {
remainder = 3 - remainder;
int count = 0;
for (int i = n - 1; i >= 0; i--) {
if (v[i] % 3 == remainder) {
v.erase(v.begin() + i);
count++;
if (count >= 2) {
break;
}
}
}
}
}
if (*v.begin() == 0) {
cout << "0" << endl;
}else {
for (int i : v) {
cout << i;
}
}
}
}
}
int main() {
int n = 9;
vector<int> v{ 4, 5, 0, 3, 2, 4, 5, 6, 7 };
findLargestDivibleNumber(n, v);
return 0;
} 出力
上記のコードを実行すると、次の結果が得られます。
765544320
結論
チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。
-
Xで割り切れる最大のK桁の数値のC++プログラム?
2つの整数XとKが与えられます。 Kは整数の桁数です。論理は、Xで割り切れる最大のK桁の数字を見つけることです。 Input: X = 30, K = 3 Output: 980 説明 980は、30で割り切れる最大の3桁の数値です。Kを10の累乗として、1を引くと、最大のK桁の数値が得られます。その後、最大の数値を取得しようとします。これはXで除算されます。 例 #include <iostream> #include <math.h> using namespace std; int main() { int X = 20;
-
指定された数値の桁を合計するC++プログラム
これは、C++言語で桁の合計を計算する例です。 例 #include<iostream> using namespace std; int main() { int x, s = 0; cout << "Enter the number : "; cin >> x; while (x != 0) { s = s + x % 10; x = x / 10;