Cho tập số nguyên dương S={a1, a2, .., an} và một số nguyên K. Tìm một tập con Q có tổng nhỏ nhất sao cho tích các phần tử của Q chia hết cho K. Dữ liệu vào: + Dòng đầu tiên chứa hai số nguyên dương n, k (n < 105, k < 109) + Dòng thứ 2 chứa n số nguyên a1( d2,..., ữn(ữi 109) Dữ liệu ra: số nguyên dương X - tổng các số trong tập con cần tìm được
input:
5 24
3 2 4 2 8
output:
9
#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;
}
Cho tập số nguyên dương S={a1, a2, .., an} và một số nguyên K. Tìm một tập con Q có tổng nhỏ nhất sao cho tích các phần tử của Q chia hết cho K. Dữ liệu vào: + Dòng đầu tiên chứa hai số nguyên dương n, k (n < 105, k < 109) + Dòng thứ 2 chứa n số nguyên a1( d2,..., ữn(ữi 109) Dữ liệu ra: số nguyên dương X - tổng các số trong tập con cần tìm được
intput:
5 24
3 2 4 2 8
output:
9
t ko bt lm, ms k10
Arr08.Pas
Cho một dãy gồm n số nguyên dương a 1 a 2,...,a n(n<=10^5, a i <=10^9) và số S
Hãy tìm đoạn con liên tục dài nhất có tổng nhỏ hơn hoặc bằng S.
Input:
Dòng đầu chứa số n và S, dòng thứ hai chứa n số nguyên dương A 1,a 2,...,a .
.
Output:
Dòng đầu chứa số lượng phần tử của đoạn con tìm được. Dòng thứ hai chứa
các phần tử của đoạn con đó, nếu có nhiều đoạn con thỏa mãn thì in ra đoạn con
đầu tiên tìm được.
Ví dụ:
Input
6 12
3 4 6 2 5 7 8 1 2 3 6
Output
4
1 2 3 6
Bạn nào giải giúp mình bài này với!!
Cho một mảng N số nguyên dương, nhiệm vụ của bạn là đếm số lượng dãy con lien tiếp có tổng bằng X.Dữ liệu vào: File xsum1.inp gồm:
+ Dòng 1: ghi hai số nguyên N và X kích thước của dãy và tổng mục tiêu X.+ Dòng 2: Ghi N số nguyên a1,a2, … ,aN là các phần tử của dãy.
Dữ liệu ra: File xsum1.out gồm duy nhất một số là số lượng dãy con có tổng bằng x.Ràng buộc
1≤ n ≤ 2 ⋅105
1≤ x,ai ≤109
Ví dụ
Xsum1.inp | Xsum1.out |
5 72 4 1 2 7 | 3 |
const fi='xsum1.inp'
fo='xsum1.out'
var f1,f2:text;
a:array[1..20000]of integer;
i,n,j,x,dem,k,m,t:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n,x);
for i:=1 to n do
read(f1,a[i]);
dem:=0;
for i:=1 to n do
for j:=1 to n do
begin
for k:=1 to n do
if (i<j) and (j<k) then
begin
t:=0;
for m:=i to k do
t:=t+a[m];
if t=x then inc(dem);
end;
end;
for i:=1 to n do
if x=a[i] then inc(dem);
writeln(f2,dem);
close(f1);
close(f2);
end.
program COST;
var n,m,s,dem:int64;a:
array[1..1000000] of int64;
i,j:longint;
begin
readln(n,m);
for i := 1 to n do read(a[i]);
dem := 0;
for i := 1 to n do
begin
s := 0;
for j := i to n do
begin
s := s+a[j];
if s <= m then
begin
inc(dem);
continue;
end
else if a[j] > m then break;
end;
end;
write(dem);
end.
BÀI 2. DÃY SỐ
Cho dãy số nguyên gồm n (3 ≤ n ≤ 100) phần tử a 1 , a 2 , …, a n (-1000 ≤ a i ≤ 1000).
Nhiệm vụ của em là phải tìm tích lớn nhất của ba trong dãy n số đã cho.
INPUT
Dòng đầu tiên chứa số nguyên dương n.
Dòng thứ hai chứa n số nguyên a 1 , a 2 , … ,a n .
OUTPUT
Một số nguyên duy nhất là tích lớn nhất tìm được của 3 số.
Ví dụ:
INPUT OUTPUT
7
5 2 10 1 3 2
150
2/4
4
3 -3 4 -1
12
* Ràng buộc:
Có 70% test tất cả các phần tử trong dãy đều dương hoặc đều âm.
dễ thì bạn làm đi mà bạn đấy k làm được bạn ấy mới hỏi mà bạn lại bảo tự làm là sao
Mn giúp mik bt Tin Học với ạ..! Mn lm đc bài nào thì làm nha ...!
Câu 1 (7,0 điểm): Số chính phương.
Cho trước số nguyên dương N (0< N≤ 106 ). Yêu cầu: Tìm số nguyên dương K nhỏ nhất sao cho tích của K và N là một số chính phương. Dữ liệu vào: File CP.INP chứa số N. Dữ liệu ra: File CP.OUT ghi số nguyên K tìm được.
Câu 2 (6,0 điểm): Dòng lớn nhất.
Cho một tệp tin gồm nhiều dòng. Trên mỗi dòng chứa một xâu kí tự chỉ gồm các kí tự chữ cái và chữ số, độ dài của mỗi xâu không quá 255 kí tự.
Yêu cầu: Đưa ra dòng có nhiều kí tự chữ cái nhất, nếu có nhiều dòng thỏa mãn thì đưa ra dòng đầu tiên có nhiều kí tự chữ cái nhất. Dữ liệu vào: File DLN.INP gồm:
+ Dòng đầu ghi số N là số lượng dòng chứa các xâu kí tự.
+ N dòng tiếp theo: mỗi dòng ghi một xâu kí tự. Dữ liệu ra: File DLN.OUT ghi ra dòng có nhiều kí tự chữ cái nhất, nếu có nhiều dòng thỏa mãn thì đưa ra dòng đầu tiên có nhiều kí tự chữ cái nhất.
Câu 3 (4,0 điểm): Dãy con đối xứng.
Một dãy số liên tiếp gọi là dãy đối xứng nếu đọc các số theo thứ tự từ trái sang phải cũng giống như khi đọc theo thứ tự từ phải sang trái. Cho dãy số A gồm N số nguyên dương: a1, a2,..., aN (1≤ N≤ 10000; 1≤ ai≤ 32000; 1≤ i≤ N)
Yêu cầu: Hãy tìm dãy con đối xứng dài nhất của dãy A. Nếu có nhiều dãy con thoả mãn thì lấy dãy con xuất hiện đầu tiên trong dãy A. Dữ liệu vào: File DX.INP gồm 2 dòng:
- Dòng 1: ghi số nguyên dương N.
- Dòng 2: ghi N số nguyên dương lần lượt là giá trị của các số trong dãy A, các số được ghi cách nhau ít nhất một dấu cách.
Dữ liệu ra: File DX.OUT ghi dãy tìm được trên cùng một dòng, các số được ghi cách nhau một dấu cách.
Câu 4 (3,0 điểm): Dãy nguyên tố.
Cho một dãy số B gồm n số nguyên dương (n ≤ 1000), mỗi phần tử trong dãy có giá trị không quá 30000. Yêu cầu:
+ Tìm dãy con dài nhất (liên tiếp hoặc không liên tiếp) các phần tử là những số nguyên tố có giá trị tăng dần của dãy B và thứ tự của các phần tử không đổi so với ban đầu. Ví dụ: Dãy 8 phần tử {4, 2, 5, 6, 3, 3, 7, 9} có dãy con nguyên tố tăng dài nhất là {2, 5, 7}.
+ Nếu có nhiều dãy con thoả mãn thì lấy dãy con xuất hiện đầu tiên trong dãy B. Dữ liệu vào: File NT.INP gồm 2 dòng:
- Dòng 1: Ghi số nguyên dương n.
- Dòng 2: Ghi n số nguyên dương, các số được ghi cách nhau một dấu cách. Dữ liệu ra: File NT.OUT ghi dãy con tìm được trên cùng 1 dòng, giữa 2 phần tử liền kề trong dãy có một dấu cách.
Nhập vào 1 mảng có N số nguyên ( N< 1000 )
1) Tính tổng các số chia hết cho 3 trong mảng vừa nhập
2) Tìm giá trị nhỏ nhất trong mảng , đưa ra vị trí đó . Nếu có nhiều vị trí chứa giá trị nhỏ nhất thì đưa ra vị trí lớn nhất trong các vị trí đó .
uses crt;
var a:array[1..100]of integer;
i,n,t,min,vt:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
t:=0;
for i:=1 to n do
if a[i] mod 3=0 then t:=t+a[i];
writeln('Tong cac so chia het cho 3 la: ',t);
min:=a[1];
for i:=1 to n do
if min>a[i] then min:=a[i];
vt:=1;
for i:=1 to n do
if min=a[i] then
begin
if vt<i then vt:=i;
end;
writeln('Gia tri nho nhat la: ',min);
writeln('Vi tri la: ',vt);
readln;
end.
Cho một dãy gồm n số nguyên dương A1,A2,…,An
(N≤105,Ai≤109) và số K.
Hãy in số nhỏ nhất lớn hơn K cùng chỉ số của nó, nếu có nhiều số nhỏ nhất lớn hơn K thì in ra các chỉ số của nó.
Input:
Dòng đầu chứa số n và K, dòng thứ hai chứa n số nguyên dương A1,A2,…,An.
Output:
Dòng đầu chứa số có giá trị nhỏ nhất lớn hơn K, dòng thứ hai chứa các chỉ số của nó.
Input
Copy
6 35
91 32 43 43 451 54
Output
Copy
43
2
Lưu ý :dùng c++
Viết ct nhập vào một mảnh gồm N số nguyên dương (N nguyên dương nhập từ bàn phím, N<=100) sau đó
a) tính tổng các số là bội của 3
b) tìm giá trị lớn nhất của mảng
c) Xét xem phần tử đầu tiên của mảng có phải là số nguyên tố hay ko
c) Cho biết các giá trị của mảng đc sx theo thứ tự ko gian chưa