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

C++の4つの除数


整数配列numsがあるとすると、正確に4つの除数を持つその配列内の整数の約数の合計を見つける必要があります。したがって、配列にそのような整数がない場合は、0を返します。たとえば、入力が[21、4、7]の場合、21には4つの除数1、3、7、21があるため、出力は32になります。 4には3つの除数1、2、4があり、7には2つの除数1と7があります。答えは21の約数の合計のみです。

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

  • ok()というメソッドを定義します。これはxを入力として受け取ります

  • ret:=1 + x、cnt:=2

  • i:=2の場合、i ^ 2 <=x、iを1増やします

    • xがiで割り切れる場合

      • retをi増やし、cntを1増やします

      • iがx/iでない場合は、cntを1増やします。ret:=ret +(x / i)

  • cntが4の場合はretを返し、それ以外の場合は0を返します

  • メインメソッドから

  • ret:=0、n:=numsのサイズ

  • 0からn–1の範囲のiの場合

    • ret:=ret + ok(nums [i])

  • retを返す

例(C ++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int ok(int x){
      int ret = 1 + x;;
      int cnt = 2;
      for(int i = 2; i * i <= x; i++){
         if(x % i == 0){
            ret += (i);
            cnt++;
            if(i != x / i){
               cnt++;
               ret += (x / i);
            }
         }
      }
      return cnt == 4 ? ret : 0;
   }
   int sumFourDivisors(vector<int>& nums) {
      int ret = 0;
      int n = nums.size();
      for(int i = 0; i < n; i++){
         ret += ok(nums[i]);
      }
      return ret;
   }
};
main(){
   vector<int> v = {21,4,7};
   Solution ob;
   cout << (ob.sumFourDivisors(v));
}

入力

[21,4,7]

出力

32

  1. C++でゲームVをジャンプする

    arrと呼ばれる整数の配列と整数dがあるとします。 1つのステップで、インデックスiから-にジャンプできます。 i + xここで、i +x

  2. C++で最も近い除数

    整数numがあるとすると、絶対差で最も近い2つの整数を見つけなければならず、その積はnum+1またはnum+2に等しくなります。2つの整数を任意の順序で見つける必要があります。したがって、入力が8の場合、出力は[3、3]になり、num + 1の場合は9になり、最も近い除数は3と3になり、num + 2 =10の場合、最も近い除数は2と5になります。したがって、3と3が選択されます。 これを解決するには、次の手順に従います- getDiv()というメソッドを定義します。これはxを入力として受け取ります diff:=infinity、サイズ2のretという配列を作成します fo