Computer >> Máy Tính >  >> Lập trình >> C ++

Bốn phép chia trong C ++


Giả sử chúng ta có một dãy số nguyên, chúng ta phải tìm tổng các ước của các số nguyên trong mảng đó có đúng bốn ước số. Vì vậy, nếu không có số nguyên nào như vậy trong mảng, thì trả về 0. Ví dụ:nếu đầu vào là [21, 4, 7], thì đầu ra sẽ là 32, vì 21 có bốn ước số 1, 3, 7, 21, 4 có ba ước số 1, 2, 4 và 7 có hai ước số 1 và 7. Câu trả lời chỉ là tổng các ước số của 21.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một phương thức có tên ok (), phương thức này sẽ lấy x làm đầu vào

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

  • đối với i:=2, i ^ 2 <=x, tăng i lên 1

    • nếu x chia hết cho i

      • tăng ret lên i, tăng cnt lên 1

      • nếu tôi không phải là x / i, thì hãy tăng cnt lên 1, ret:=ret + (x / i)

  • trả về ret, nếu cnt là 4, nếu không thì trả về 0

  • Từ phương thức chính

  • ret:=0, n:=kích thước của nums

  • cho tôi trong phạm vi từ 0 đến n - 1

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

  • trả lại ret

Ví dụ (C ++)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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));
}

Đầu vào

[21,4,7]

Đầu ra

32