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

合計が与えられた数nに等しい平方の最小数


任意の数は、いくつかの完全な平方数の合計で表すことができます。この問題では、与えられた値を表すために必要な完全な平方項の最小数を見つける必要があります。

値を94とすると、95 =9 2 + 3 2 + 2 2 + 1 2 。したがって、答えは4になります

アイデアは1から始めることであり、完全な平方数を得るためにさらに進んでいきます。値が1〜3の場合、1のみで形成する必要があります。

入力と出力

Input:
An integer number. Say 63.
Output:
Number of squared terms. Here the answer is 4.
63 =72 + 32 + 22 + 1

アルゴリズム

minSquareTerms(value)

入力: 与えられた値。

出力: 与えられた値に到達するための平方項の最小数。

Begin
   define array sqList of size value + 1
   sqList[0] := 0, sqList[1] := 1, sqList[2] := 2, sqList[3] := 3

   for i in range 4 to n, do
      sqList[i] := i
      for x := 1 to i, do
         temp := x^2
         if temp > i, then
            break the loop
         else sqList[i] := minimum of sqList[i] and (1+sqList[i-temp])
      done
   done
   return sqList[n]
End

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

int min(int x, int y) {
   return (x < y)? x: y;
}

int minSquareTerms(int n) {
   int *squareList = new int[n+1];

   //for 0 to 3, there are all 1^2 needed to represent

   squareList[0] = 0;
   squareList[1] = 1;
   squareList[2] = 2;
   squareList[3] = 3;

   for (int i = 4; i <= n; i++) {
      squareList[i] = i; //initially store the maximum value as i

      for (int x = 1; x <= i; x++) {
         int temp = x*x;      //find a square term, lower than the number i
         if (temp > i)
            break;
         else squareList[i] = min(squareList[i], 1+squareList[itemp]);
      }
   }
   return squareList[n];
}

int main() {
   int n;
   cout << "Enter a number: "; cin >> n;
   cout << "Minimum Squared Term needed: " << minSquareTerms(n);
   return 0;
}

出力

Enter a number: 63
Minimum Squared Term needed: 4

  1. 与えられた数C#から合計のユニークな組み合わせを見つける方法は?

    有効なシーケンスを格納する出力リストを作成し、再帰ツリーのパスで見つかった現在のシーケンスを格納する現在のリストを作成します。ターゲットが達成されるまで再帰に入るバックトラック関数。それ以外の場合は、ターゲットが0未満になると、前のフェーズにバックトラックする必要があります。任意の時点で、ターゲットが0になった場合は、候補配列を結果に次のように追加します。候補配列の値は、指定されたターゲットまで合計する必要があります。 そうでない場合は、候補配列に要素を1つずつ追加し、再帰的に前進します。 たとえば、数値が5であるため、5を形成する数値を見つける必要があります。出力は「1,4」、「2,3」

  2. Pythonで合計がターゲットに指定されているサブリストの数を見つけるプログラム

    numsと呼ばれる数値のリストと別の値のターゲットがあるとすると、合計がターゲットと同じサブリストの数を見つける必要があります。 したがって、入力がnums =[3、0、3] target =3のようである場合、合計が3であるこれらのサブリストがあるため、出力は4になります。[3]、[3、0]、[0、 3]、[3]。 これを解決するには、次の手順に従います。 temp:=空のマップ temp [0]:=1 s:=0 ans:=0 0からnumsのサイズの範囲のiの場合は、 s:=s + nums [i] comp:=s-ターゲット compが一時的なものである場合