Cho tập A có n phần tửv( n > 2 ) k là một số nguyên 0<k<n Số chỉnh hợp chập k của n phần tử là
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;
}
BÀI 2. ĐỘ CAO CỦA DÃY SỐ DOCAO13.PAS
Ta gọi độ cao của một số nguyên dương K là tổng giá trị các chữ số của K.
Ví dụ: số 25362 có độ cao là 18. Cho dãy số nguyên dương A gồm N phần tử a 1 ,
a 2 , ..., a N .(1 ≤ N ≤ 1000, 1 ≤ i ≤ N, 0 < a i ≤ 2147483647)
Yêu cầu: Hãy tính độ cao của các phần tử trong dãy số A.
Dữ liệu vào: Ghi trong file văn bản DOCAO13.INP có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương N, là số lượng phần tử của dãy số.
- Dòng 2: Ghi N số nguyên dương, số thứ i là giá trị của phần tử a i trong dãy số,
các số được ghi cách nhau ít nhất một dấu cách.
Dữ liệu ra: Ghi ra file văn bản DOCAO13.OUT theo cấu trúc như sau:
- Dòng 1: Ghi N số nguyên dương t 1 , t 2 , ..., t N, t i là độ cao của số của a i . Các số
được ghi cách nhau một dấu cách.
Ví dụ:
DOCAO13.INP DOCAO13.OUT
5 13 5 5 10 9
const fi='docao13.inp'
fo='docao13.out'
var f1,f2:text;
a:array[1..100]of integer;
i,n:integer;
//chuongtrinhcon
function kq(x:integer):integer;
var t,k:integer;
begin
t:=0;
while (x>0) do
begin
k:=x mod 10;
t:=t+k;
x:=x div 10;
end;
kq:=t;
end;
//chuongtrinhchinh
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n);
for i:=1 to n do
read(f1,a[i]);
for i:=1 to n do
write(f2,kq(a[i]):4);
close(f1);
close(f2);
end.
Một tập hợp các số nguyên dương được gọi là tập hương nếu tập hợp đó có ít nhất 2 phần tử và mỗi phần tử của nó đều có ước nguyên tố chung với ít nhất một trong các phần tử còn lại . Đặt P(n)=n2+n+1. Hãy tìm số nguyên dương b nhỏ nhất sao cho tồn tại số không âm a để tập hợp {P(a+1);P(a+2);...;P(a+b)} là tập hương.
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
Cho tập hợp A có n phần tử ( n ≥ 4 ) . Biết rằng số tập con của A có 8 phần tử nhiều gấp 26 lần số tập con của A có 4 phần tử. Hãy tìm k ∈ 1 , 2 , 3 , . . . , n sao cho số tập con gồm k phần tử của A là nhiều nhất
A. k = 20
B. k = 11
C. k = 14
D. k = 10
Đáp án D
Số tập con của A có 8 phần tử C n 8
và số tập của A có 4 phần tử là C n 4
⇒ 26 = C n 8 C n 4 = ( n - 7 ) ( n - 5 ) ( n - 4 ) 1680
⇔ n = 20
Số tập con gồm k phần tử là C 20 k
Khi xảy ra C 20 k > C 20 k + 1
Vậy với k = 10 thì C 20 k đạt giá trị nhỏ nhất.
Cho tập hợp A có n phần tử n > 4 . Biết rằng số tập con của A có 8 phần tử nhiều gấp 26 lần số tập con của A có 4 phần tử. Hãy tìm k ∈ 1 , 2 , 3 , ... , n sao cho số tập con gồm k phần tử của A là nhiều nhất.
A. k = 20
B. k = 11
C. k = 14
D. k = 10
Đáp án D
Ta có:
C n 8 = 26 C n 4 ⇔ n ! 8 ! n − 8 ! = 26 n ! 4 ! n − 4 ⇔ n − 7 n − 6 n − 5 n − 4 = 13 .14.15.16 ⇔ n − 7 = 13 ⇔ n = 20
Số tập con gồm k phần tử của A là: C 20 k ⇒ k = 10 thì C 20 k nhỏ nhất.
Cho tập hợp A có n phần tử n ≥ 4 . Biết rằng số tập con của A có 8 phần tử nhiều gấp 26 lần số tập con của A có 4 phần tử. Hãy tìm k ∈ 1 , 2 , 3 , ... , n sao cho số tập con gồm k phần tử của A là nhiều nhất
A. k = 20
B. k = 11
C. k = 14
D. k = 10
Đáp án D
Số tập con của A có 8 phần tử C n 8 và số tập của A có 4 phần tử là C n 4
⇒ 26 = C n 8 C n 4 = 4 ! n − 4 ! 8 ! n − 8 ! = n − 7 n − 5 n − 4 1680 ⇔ n = 20.
Số tập con gồm k phần tử là C 20 k .
Khi xảy ra
C 20 k > C 20 k + 1 ⇔ 20 ! k ! 20 − k ! > 20 ! k + 1 ! 19 − k ! ⇔ k + 1 > 20 − k ⇔ k > 9 , 5
Vậy với thì đạt giá trị nhỏ nhất
Cho một dãy N số nguyên Ai gồm các số a1, a2, a3, ..., an. Yêu cầu: Cho biết số K, là số lượng phần tử có giá trị trái dấu luân phiên dài nhất từ 2 phần tử trở lên. Dữ liệu vào: Cho trong tệp văn bản AMDUONG.INP có cấu trúc: + Dòng 1: Ghi số N (0 < N <=600000) + Dòng 2: Ghi một dãy N số ai, mỗi số cách nhau một khoảng trống (0 <> | ai | < 100000) Dữ liệu ra: Kết quả đưa ra trong tệp AMDUONG.OUT theo cấu trúc sau: + Dòng 1: Ghi duy nhất một số nguyên K 0<=K<=N) + Dòng 2: Ghi các phần tử trái dấu luân phiên dài nhất đầu tiên tìm thấy. Nếu có nhiều dãy thõa mãn thì in ra dãy đầu tiên tìm thấy. Còn nếu không tìm được dãy nào thì ghi số 0.
Cho dãy số nguyên gồm N phần tử a 1 , a 2 , ..., a N .
(1 ≤ N ≤ 100, 0 ≤ a i ≤ 32767, 1 ≤ i ≤ N)
Yêu cầu: Hãy tìm số K, là số lượng lớn nhất các phần tử liên tiếp có giá trị bằng 0
trong dãy số trên.
Dữ liệu vào: Nhập số tự nhiên N và dãy số a 1 , a 2 , ..., a N từ bàn phím.
Dữ liệu ra: In ra màn hình số K tìm được.
Ví dụ: Nhập vào từ bàn phím N = 13, giá trị các phần tử của dãy số lần lượt là:
2 0 0 5 8 0 0 0 6 0 7 8 1
In ra màn hình kết quả K = 3