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.
#include <iostream>
#include <vector>
using namespace std;
vector<int> primeFactors(int n) {
vector<int> factors;
for (int i = 2; i * i <= n; i++) {
while (n % i == 0) {
factors.push_back(i);
n /= i;
}
}
if (n > 1) factors.push_back(n);
return factors;
}
int main() {
int n, k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
vector<int> factors = primeFactors(k);
int sum = accumulate(a.begin(), a.end(), 0);
vector<vector<bool>> dp(n+1, vector<bool>(sum+1, false));
dp[0][0] = true;
for (int i = 1; i <= n; ++i) {
for (int j = 0; j <= sum; ++j) {
dp[i][j] = dp[i-1][j];
if (j >= a[i-1]) {
for (int factor : factors) {
if (a[i-1] % factor == 0) {
dp[i][j] = dp[i][j] || dp[i-1][j-a[i-1]];
break;
}
}
}
}
}
for (int j = 0; j <= sum; ++j) {
if (dp[n][j]) {
cout << j << endl;
break;
}
}
return 0;
}
Ý tưởng: Tìm số lớn nhất trong hai dãy đã cho. Không mất tính tổng quát, giả sử số lớn nhất của 2 dãy nằm trong dãy a, ta xét các số trong dãy b, tại vị trí i: nếu a[i] < b[i] thì hoán vị a[i] và b[i]. Sau đó tìm số lớn nhất trong dãy b rồi nhân với số lớn nhất của hai dãy sẽ ra được kết quả.
#include <iostream>
using namespace std;
#define maxN 105
int main() {
int a[maxN], b[maxN];
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
int maxA = 0, maxB = 0;
for (int i = 0; i < n; i++)
{
cin >> a[i]; maxA = max(a[i], maxA);
}
for (int i = 0; i < n; i++)
{
cin >> b[i]; maxB = max(b[i], maxB);
}
if (maxA < maxB)
swap(a, b);
int maxV = max(maxA, maxB);
for (int i = 0; i < n; i++)
if (b[i] > a[i])
swap(b[i], a[i]);
maxB = 0;
for (int i = 0; i < n; i++)
maxB = max(b[i], maxB);
cout << maxB * maxV << endl;
}
return 0;
}
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n,k;
cin >> n >> k;
int a[n];
for (int i=0;i<n;i++)
cin >> a[i];
sort(a,a+n);
cout << a[k-1];
return 0;
}
Var a:array[1..100] of integer;
i,n:integer;
s:longint;
Begin
Write('n = ');readln(n);
For i:=1 to n do
Begin
Write('Nhap phan tu thu ',i,' = ');readln(a[i]);
s:=s+a[i];
End;
Write('Cac phan tu vua nhap la ');
For i:=1 to n do
Write(a[i]:8);
Writeln;
Write('Tong cua chung la ',s);
Readln
End.
Bài 1
Var a:array:[1..1000] of integer;
i,n:integer;
s:longint;
Begin
Write('n = ');readln(n);
For i:=1 to n do
Begin
Write('Nhap so thu ',i,' = ');readln(a[i]);
s:=s+a[i];
End;
Write('Cac so vua nhap la: ');
For i:=1 to n do
Write(a[i]:8);
writeln;
write('Tong cac so la ',s);
Readln
End.
Đề thi tin học trẻ BT phải ko b?
Mà bài này giải sao nhỉ?
Muốn xem code để tham khảo quá!!!
sắp xếp lại các phần tử theo chiều tăng dần rồi đặt kết quả muốn tìm = 1, so sánh nó với từng phần tử trong mảng, nếu bé hơn thì dừng chương trình và đó là kết quả, nếu không thỉ cộng kết quả cho phần tử đang được so sánh.
code :
program giai;uses crt;var n,m,i,c,t : integer;A : array[1..100] of integer;beginclrscr;write('so phan tu cua day so :');readln(m);for i:=1 to m do begin readln(A[i]); end;for i:= 1 to m do for n:=i+1 to m do if A[i] > A[n] then begin c:= A[i]; A[i] := A[n]; A[n] := c; end;t:= 1;for i:=1 to m-1 do if t < A[i] then break else t:= t+ A[i];writeln(t);readln;end.