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

C ++で1文字の出現をすべて削除した後、ASCII値の合計を最小化します


文字列があるとします。特定の文字が出現するたびに削除した後、文字列に対する各文字のASCII値の合計を最小化する必要があります。文字列が「hello」のように指定されているとすると、ASCII文字の合計は(104 + 101 + 108 + 108 + 111)=532です。次に各文字の出現を確認します。

  • hは1回発生したため、コストは1 * 104 =104
  • eは1回発生したため、コストは1 * 101 =101
  • lは1回発生したため、コストは2 * 108 =216
  • oは1回発生したため、コストは1 * 111 =111

ここで、lは最大時間発生しているため、lの出現をすべて削除すると、値は最小化されます。したがって、実際には上記のリストから最大値を削除しています。ここで、最終結果は532 – 216 =316

になります。

ロジックは単純です。最初は、文字列のASCII合計を取得する必要があります。次に、文字列に存在する各文字の頻度をカウントし、最大値を提供している文字をオカレンス*ASCII値として削除します。減算された値が結果です。

#include <iostream>
using namespace std;
int minASCIISum(string str, int len) {
   int max_val = INT_MIN, sum = 0;
   int frequency[26] = { 0 };
   for (int i = 0; i < len; i++) {
      frequency[str[i] - 'a']++;
      sum += (int)str[i];
   }
   for (int i = 0; i < 26; i++)
   max_val = max(max_val, frequency[i] * (i + 'a'));
   return (sum - max_val);
}
int main() {
   string str = "hello";
   int n = str.length();
   cout << "Minimized Sum: " << minASCIISum(str, n);
}

出力

Minimized Sum: 316

  1. C ++で繰り返し減算してすべての要素を同じにした後、最大配列合計を見つけます

    n個の要素の配列があるとします。すべての要素が同じになるように、すべての要素の可能な最大合計を見つけます。許可される操作は、任意の2つの要素を選択し、それらの大きい方を2つの絶対差で置き換えることだけです。要素が[9、12、3、6]のようなものだとします。その場合、出力は12になります。したがって、最初にA[1]をA[1] – A [3] =12 – 6 =6に置き換えます。したがって、要素は[9、6、3、6]になり、次にA[を置き換えます。 3] with A [3] – A [2] =6 – 3 =3。したがって、要素は[9、6、3、3]です。次に、A[0]をA[0] – A [1] =9

  2. C ++でa、b、cからすべてのゼロを削除した後、a + b=cが有効かどうかを確認します

    3つの数値a、b、cがあるとすると、数値からすべての0を削除した後、a + b=cかどうかを確認する必要があります。数値がa=102、b =130、c =2005であるとすると、0を削除すると、数値はa + b =c:(12 + 13 =25)になります。これはtrueです 数値からすべての0を削除し、0を削除した後、a + b=cかどうかを確認します。 例 #include <iostream> #include <algorithm> using namespace std; int deleteZeros(int n) {    int re