削除する桁の位置を印刷して、C++で数値を6で割り切れるようにします
この問題では、番号が与えられ、番号からさらに数字を削除する必要があります。削除後に形成された新しい数が6で割り切れるようにします。
概念をよりよく学ぶために例を見てみましょう-
Input : 1324 Output : 4
説明 − 4番目の数値を削除すると、6で割り切れる132が得られます。
ここでは、番号が与えられており、番号を6で割り切れるようにするには、番号を削除した位置を返す必要があります。
この問題を解決するために、問題を解決するロジックを作成しようとします。このために、数値が2と3で割り切れる場合、それは6で割り切れるという知識を使用します。
数字から数字を削除した後、形成された新しい数字は、6の除算、つまり2と3の両方の除算についてチェックされます。
アプローチ
数字に基づいて、数字を削除して作成された数字が6で割り切れるかどうかを確認できます。数字の最後の桁を見ると、2つの条件が発生します。
最後の桁が奇数の場合
最後の桁が奇数の場合、可能な唯一の方法は最後の桁を削除することです。また、最後の桁の隣の桁が偶数の場合にのみ、新しい数値は6で割り切れません。そうでなければ、解決策は不可能です。
最後の桁が偶数の場合
最後の桁が偶数の場合、数値を3で割ったときの余りを見つける必要があります。この数値に基づいて、どの桁を削除できるかを確認できます。
数を3つの3つのケースで割ると-
余りは1です −除算の余りが1の場合、1、4、7の数字のいずれかを配列から削除できます。複数の数字を削除できる場合は、削除後に形成される数字が最大になるように数字を削除します。
余りは2です −除算の余りが2の場合、2、5、8の数字のいずれかを配列から削除できます。複数の数字を削除できる場合は、削除後に形成される数字が最大になるように数字を削除します。
余りは3です −除算の余りが1の場合、3、6、9の数字のいずれかを配列から削除できます。複数の数字を削除できる場合は、削除後に形成される数字が最大になるように数字を削除します。
これらに基づいて、いくつかの問題を解決し、目的の出力を見つけましょう-
最後の桁が奇数の場合
1。 34241341
この場合、削除できるのは最後の位置から1の数字だけで、形成される数値は6で割り切れる3432134になります。したがって、削除された1の位置、つまり8を返します。
2。 3214241
この場合、削除できる数字は最後の位置から1であり、形成される数値は341224になります。これは6で割り切れないため、-1を返します。
最後の桁が偶数の場合
1。 8097860
この場合、数を3で割って、2に等しい余りを見つける必要があります。したがって、余りが2の場合、数から2、5、8を削除できます。したがって、位置1と5から8を削除して、数値を2で割り切れるようにすることができます。1番目の位置から8を削除すると、より小さな数値が返されるため、5番目の位置から8を削除します。形成される新しい番号は、6で割り切れる809760になります。したがって、5を返します。
例
このロジックに基づいて、問題を解決するためのプログラムを作成しましょう-
#include <bits/stdc++.h> using namespace std; void isDivisibleBy6(string num){ int n = num.length(); int a[n]; int sum = 0; for (int i = 0; i < n; i++) { a[i] = num[i] - '0'; sum += a[i]; } if (a[n - 1] % 2){ if ( (a[n - 2] % 2 != 0) || (sum - a[n - 1]) % 3 != 0) { cout << "-1" << endl; } else { cout << n << endl; } } else { int re = sum % 3; int del = -1; int flag = 0; for (int i = 0; i < n - 1; i++) { if ((a[i]) % 3 == re) { if (a[i + 1] > a[i]) { del = i; flag = 1; break; } else { del = i; } } } if (flag == 0) { if (a[n - 2] % 2 == 0 and re == a[n - 1] % 3) del = n - 1; } if (del == -1) cout << -1 << endl; else { cout << del + 1 << endl; } } } int main(){ string number = "343224152"; isDivisibleBy6(number); return 0; }
出力
5
-
Xで割り切れる最大のK桁の数値のC++プログラム?
この問題では、Xで割り切れる最大のK桁の数を見つけようとします。このタスクを実行するには、この式((10 ^ k)– 1)で最大のK桁の数を取得します。次に、数値がXで割り切れるかどうかを確認します。割り切れない場合は、この数式を使用して正確な数値を取得します。 𝑚𝑎𝑥−(𝑚𝑎𝑥 𝑚𝑜𝑑 𝑋) 1つの例は、29で割り切れる5桁の数字のようなものです。したがって、最大の5桁の数字は99999です。これは29で割り切れません。ここで、式を適用すると、-が得られます。 99999−(99999 𝑚𝑜𝑑 29)=99999−7=99992
-
Xで割り切れる最小のK桁の数字のためのC++プログラム?
この問題では、Xで割り切れる最小のK桁の数を見つけようとします。このタスクを実行するには、この式(10 ^(k-1))で最小のK桁の数を取得します。次に、数値がXで割り切れるかどうかを確認します。割り切れない場合は、この数式を使用して正確な数値を取得します。 (min+ 𝑋)−((min+ 𝑋) 𝑚𝑜𝑑 𝑋) 1つの例は、29で割り切れる5桁の数字のようなものです。したがって、最小の5桁の数字は10000です。これは29で割り切れません。ここで、式を適用すると、-が得られます。 (10000+ 29)−((10000+29) 𝑚𝑜𝑑 29)=1002