C++程式檢查能否重新排列陣列使得給定公式的結果為m
假設我們有一個包含n個元素的陣列A和另一個數字m。我們必須檢查是否可以重新排列陣列,使得
$$\mathrm{\sum_{i=1}^{n} \sum_{j=1}^{n}\frac{A[j]}{j} = m}$$
A[j]/j運算不會進行四捨五入。
因此,如果輸入類似於A = [2, 5, 1]; m = 8,則輸出為True,因為對於[1, 2, 5]的排列,(1/1 + 2/2 + 5/3) + (2/2 + 5/3) + (5/3) = 8
步驟
為了解決這個問題,我們將遵循以下步驟:
sum := 0 n := size of A for initialize i := 0, when i < n, update (increase i by 1), do: sum := sum + A[i] if sum is same as m, then: return true Otherwise return false
示例
讓我們看看下面的實現來更好地理解:
#include <bits/stdc++.h>
using namespace std;
bool solve(vector<int> A, int m) {
long sum = 0;
int n = A.size();
for (int i = 0; i < n; ++i) {
sum += A[i];
}
if (sum == m)
return true;
else
return false;
}
int main() {
vector<int> A = { 2, 5, 1 };
int m = 8;
cout << solve(A, m) << endl;
}輸入
{ 2, 5, 1 }, 8輸出
1
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP