K
Khách

Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.

Ở đây mình chỉ chấp nhận một cách chia dãy thành 3 phần có tổng bằng nhau và khác rỗng.

Gọi aiai là số thứ ii trong mảng đã cho. Lưu ý rằng số thứ ii trong mảng đã cho (aiai) được đánh số i−1i−1 theo đề bài.

Ta định nghĩa một hàm f(x)f(x) (mảng cộng dồn) theo công thức truy hồi như sau:

f(x)={0 nếx=0f(x−1)+ax nếu x > 0f(x)={0 nếu x=0f(x−1)+ax nếu x > 0

Ta có thể dễ dàng tính được giá trị của f(i)f(i) với mọi 0≤in0≤i≤n trong một vòng for.

Gọi SS là tổng các phần tử trong một phần của AA sau khi tách AA thành 3 phần như đề bài đã nói. Dễ thấy, SS bằng 1313 tổng dãy AA. Mà theo định nghĩa hàm f(x)f(x) như trên, ta có S=13×f(n)S=13×f(n). Do đó, ta có thể dễ dàng tính được SS.

Việc bây giờ ta cần làm là tìm hai điểm cắt i,ji,j (1≤i<j<n1≤i<j<n) sao cho:

a1+a2+…+ai=ai+1+…+aj=aj+1+…+ana1+a2+…+ai=ai+1+…+aj=aj+1+…+an

Theo định nghĩa hàm f(x)f(x), ta có thể thấy ngay đẳng thức trên tương đương:

f(i)−f(0)=f(j)−f(i)=f(n)−f(j)=Sf(i)−f(0)=f(j)−f(i)=f(n)−f(j)=S

Từ đó ta nhận thấy cần tìm hai điểm cắt i,ji,j sao cho f(i)=Sf(i)=S và f(j)=2×Sf(j)=2×S

Công việc đến đây đã quá đơn giản do ta đã tính trước được tất cả các giá trị của f(x)f(x).

30 tháng 5 2021

Tk :Lazi

6 tháng 10 2023

#include <iostream>

#include <vector>

using namespace std;

bool divideArray(vector<int>& nums, int N) {

     int totalSum = 0;

     for (int i = 0; i < N; i++) {

          totalSum += nums[i];

     }

     if (totalSum % 2 != 0) {

          return false;

     }

     int halfSum = totalSum / 2;

     vector<vector<bool>> dp(N + 1, vector<bool>(halfSum + 1, false));

     dp[0][0] = true;

     for (int i = 1; i <= N; i++) {

          for (int j = 0; j <= halfSum; j++) {

               dp[i][j] = dp[i - 1][j];

               if (j >= nums[i - 1]) {

                    dp[i][j] = dp[i][j] || dp[i - 1][j - nums[i - 1]];

               }

          }

     }

     return dp[N][halfSum];

}

int main() {

     int N;

     cout << "Nhập số phần tử N: ";

     cin >> N;

     vector<int> nums(N);

     cout << "Nhập các phần tử của mảng: ";

     for (int i = 0; i < N; i++) {

          cin >> nums[i];

     }

     bool isPossible = divideArray(nums, N);

     if (isPossible) {

          cout << "Có thể chia mảng thành hai đoạn có tổng bằng nhau." << endl;

     } else {

          cout << "Không thể chia mảng thành hai đoạn có tổng bằng nhau." << endl;

     }

     return 0;

}

22 tháng 8 2023

Có thể coi mọi phần mềm viết bằng Python đều là phần mềm nguồn mở.

5 tháng 5 2023

def is_prime(num):

      if num < 2:

            return False

      for i in range(2, int(num ** 0.5) + 1):

            if num % i == 0:

                  return False

            return True

def is_fibonacci(num):

      if num == 0 or num == 1:

            return True

      x = 0

      y = 1

      while y < num:

            z = x + y

            x = y

            y = z

      if y == num:

            return True

      else:

            return False

n = int(input("Nhập số phần tử của dãy: "))

arr = [ ]

for i in range(n):

      num = int(input(f"Nhập phần tử thứ {i+1}: "))

      arr.append(num)

sum = 0

for num in arr:

      if is_prime(num) and is_fibonacci(num):

            sum += num

print(f"Tổng các phần tử vừa là số nguyên tố vừa là số fibonacci trong dãy là: {sum}")

11 tháng 4 2022

tham khảo:

a, Số bài đạt điểm giỏi là :

45 x \(\dfrac{1}{3}\) = 15 ( bài )

Số bài còn lại là :

45 - 15 = 30 ( bài )

Số bài đạt điểm khá là :

30 x 90% = 27 ( bài )

Số bài đạt điểm trung bình là :

30 - 27 = 3 ( bài )

b, Tỉ số phần trăm số bài đạt điểm trung bình với tổng số bài kiểm tra là :

3 : 45 x 100 = 6,66%

22 tháng 5 2015

luanasd

22 tháng 5 2015
G
ọi a, b, c l
à ba s
ố đ
ư
ợc chia ra từ số A.
Theo đ
ề b
ài ta có: a : b : c =
2 3 1
: :
5 4 6
(1)
và a
2
+b
2
+c
2
= 24309 (2)
T
ừ (1)
2 3 1
5 4 6
a b c
 
= k
2 3
; ;
5 4 6
k
a k b k c
  
Do đó (2)
2
4 9 1
( ) 24309
25 16 36
k
  
k = 180 và k =
180
+ V
ới k =180, ta đ
ư
ợc: a = 72; b = 135
; c = 30.
Khi đó ta có s
ố A = a + b + c = 237.
+ V
ới k =
180
, ta đư
ợc: a =
72
; b =
135
; c =
30
Khi đó ta có só A =
72
+(
135
) + (
30
) =
237
.