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

それを爆発させることなく体重計で金をロードする順序を見つけるためのC++プログラム


n個の異なる要素を持つ配列Aと、別の数xがあるとします。金はn個あります。 i番目の金の重さはA[i]です。このn個を一度に1個ずつ体重計に載せます。しかし、スケールには異常な欠陥があります。スケールの総重量が正確にxの場合、爆発します。プロセス中にスケールを爆発させることなく、n個すべての金貨をある順序でスケールに配置できるかどうかを確認する必要があります。可能であれば、その順序を見つけてください。不可能な場合は、「不可能」とマークしてください。

したがって、入力がA =[1、2、3、4、8]のような場合; x =6の場合、出力は[8、1、2、3、4]になり、他の注文も有効になります

ステップ

これを解決するには、次の手順に従います-

s := 0
n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
   s := s + A[i]
if s is same as x, then:
   return "IMPOSSIBLE"
s := 0
for initialize i := 0, when i < n, update (increase i by 1), do:
   s := s + A[i]
   if s is same as x, then:
      print A[i + 1], A[i]
      (increase i by 1)
      Ignore following part, skip to the next iteration
   print A[i]

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;

void solve(vector<int> A, int x) {
   int s = 0;
   int n = A.size();
   for (int i = 0; i < n; i++) {
      s += A[i];
   }
   if (s == x) {
      cout << "IMPOSSIBLE";
      return;
   }
   s = 0;
   for (int i = 0; i < n; i++) {
      s += A[i];
      if (s == x) {
         cout << A[i + 1] << ", " << A[i] << ", ";
         i++;
         continue;
      }
      cout << A[i] << ", ";
   }
}
int main() {
   vector<int> A = { 1, 2, 3, 4, 8 };
   int x = 6;
   solve(A, x);
}

入力

{ 1, 2, 3, 4, 8 }, 6

出力

1, 2, 4, 3, 8,

  1. 階乗を見つけるためのC++プログラム

    非負の整数nの階乗は、n以下のすべての正の整数の積です。 例:5の階乗は120です。 5! = 5 * 4 * 3 * 2 *1 5! = 120 整数の階乗は、再帰プログラムまたは非再帰プログラムを使用して見つけることができます。これらの両方の例を以下に示します。 非再帰プログラムを使用した階乗 forループを使用して、数値の階乗を見つけることができます。これは、次のプログラムを使用して示されます- 例 #include <iostream> using namespace std; int main() {    int n = 5, fact = 1

  2. C++で訪問した都市の正しい順序を見つけるためのプログラム

    [from、to]のような出発空港と到着空港のペアで表される航空券のリストがあるとすると、旅程を正しい順序で再構築する必要があります。すべてのチケットは、KLKを出発する男性のものです。したがって、旅程はJFKで始まる必要があります。 したがって、入力が[[MUC、 LHR]、[KLK、 MUC]、[SFO、 SJC]、[LHR、 SFO]]の場合、出力は[KLK、 MUC、 LHR、 SFO、SJC]になります。 これを解決するには、次の手順に従います- 配列retとグラフと呼ばれるマップを定義します。 visitというメソッドを定義します。これは入力として空港名を取ります