Cho dãy số A có N phần tử, tính giá trị lớn nhất của S = | A[i] + A[i+1] + A[i+2] + ... + A[j] | (1 ≤ i ≤ j ≤ N)
Cho dãy số nguyên a gồm N phần tử. Đếm xem có bao nhiêu cặp (i, j) trong đó i < j và a[i] = a[j]
Input SpecificationDòng đầu là N số lượng phần tử của dãy. (0 < N <= 100000)
Dòng tiếp theo chứa n số nguyên là các phần tử của dãy số a (0< a.i <=1000)
Output SpecificationSố cặp (i,j) thỏa mãn yêu cầu.(Ngôn ngữ C++ nha)
#include <iostream>
#include <map>
using namespace std;
int main() {
int n;
cin >> n;
map<int, int> count;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
count[x]++;
}
int ans = 0;
for (auto p : count) {
int x = p.second;
ans += (x * (x - 1)) / 2;
}
cout << ans;
return 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
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.
SWAP X
Bạn được cho hai dãy số nguyên dương aa và bb gồm nn phần tử mỗi mảng. Bạn được phép thực hiện thao tác này nhiều lần:
Chọn 1 số nguyên ii bất kỳ (1≤i≤n) và tráo đổi 2 phần tử a[i] và b[i].
Yêu cầu: Tìm giá trị nhỏ nhất có thể của max(a1,a2,...,an)⋅max(b1,b2,...,bn)sau khi bạn thực hiện thao tác trên 1 hoặc nhiều lần.
Dữ liệu:
Dòng đầu ghi t thể hiện số testcase, t≤100.
t block tiếp theo, mỗi block có dạng:
Dòng đầu ghi số nguyên dương n (n≤104).
Dòng thứ hai ghi nn số nguyên dương a1,a2,...,an (ai≤106)
Dòng thứ ba ghi nn số nguyên dương b1,b2,...,bn(bi≤106).
Kết quả:
Ứng với mỗi testcase, in ra kết quả cần tìm.
input
3
6
1 2 6 5 1 2
3 4 3 2 2 5
3
3 3 3
3 3 3
2
1 2
2 1
output
18
9
2
Ý 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;
}
Lập trình C++. cho dãy số nguyên gồm n phần tử a1, a2,.... các số đôi một khác nhau. tìm bộ ba số (a i, a j, a k) thoả mãn a i mũ 2 = a j mũ 2 + a k mũ 2, bộ 3 này được gọi là bộ số Pitago. Dữ liệu vào từ tệp PITAGO.INP: dòng đầu là số n, dòng tiếp theo là n số của dãy đã cho. Kết quả: ra tệp PITAGO.OUT ghi ra số lượng bộ ba số Pytago đã tìm được, Nếu không có bộ số nào ghi ra số 0
Với thuật toán sắp xếp chèn, chứng minh rằng nếu thay toàn bộ phần Chèn A[i] vào vị trị đúng của dãy con A[@), A[l], ..., A[i - 1]> bằng các lệnh sau thì chương trình vẫn đúng:
j=1
while j>0 and A[j]<A[j-1]:
Đổi chỗ A[j] và A[j-1]
j=j-1
Để chứng minh tính đúng đắn của thuật toán sắp xếp chèn với các lệnh thay đổi trên, ta cần chứng minh hai điều kiện sau đây:
Điều kiện ban đầu (trước khi bắt đầu vòng lặp): Sau khi thực hiện lệnh j = 1, giá trị của j đang là 1, và dãy con A[0] chỉ gồm một phần tử là A[0] (vì j-1 là 0). Do đó, dãy con này đã được sắp xếp đúng.
Điều kiện duy trì (trong quá trình vòng lặp): Trong mỗi vòng lặp của while, nếu A[j] < A[j-1], ta hoán đổi giá trị của A[j] và A[j-1] bằng lệnh Đổi chỗ A[j] và A[j-1]. Sau đó, ta giảm giá trị của j đi 1 đơn vị bằng lệnh j = j - 1. Lúc này, giá trị của A[j] là giá trị của A[j-1] trước khi hoán đổi, và giá trị của A[j-1] là giá trị của A[j] trước khi hoán đổi. Điều này đồng nghĩa với việc dãy con A[0], A[1], ..., A[j-1] đã được sắp xếp đúng sau mỗi vòng lặp.
Vậy nên, dãy con A[0], A[1], ..., A[j-1] luôn được sắp xếp đúng sau mỗi vòng lặp của while, và dãy con này sẽ không bị thay đổi giá trị trong quá trình hoán đổi. Do đó, tính đúng đắn của thuật toán sắp xếp chèn vẫn được duy trì sau khi thay toàn bộ phần chèn A[i] vào vị trí đúng của dãy con A[0], A[1], ..., A[i-1] bằng các lệnh trên.
Có N người (đánh số thứ tự từ 1 đến N) và tình trạng quen biết của N người này được cho bởi mảng hai chiều A(N,N) đối xứng qua đường chéo chính, trong đó A[i,j] = A[j,i] = 1 nếu i quen j và bằng 0 nếu i không quen j (quy ước A[i,j]=0 nếu i=j). Hãy xét xem liệu có thể chia N người đó thành 2 nhóm mà trong mỗi nhóm hai người bất kỳ đều không quen nhau ? . Nếu được thì làm theo chương trình lớp 11 giúp mình
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
Cho dãy số nguyên a gồm n phần tử được sắp xếp tăng dần. Hãy xác định giá trị lớn nhất của i sao cho ai≤x. Nếu không có vị trí thõa mãn in ra 0.
Input
Dòng đâu tiên chứa số hai số nguyên dương n và k - độ dài của dãy, số câu hỏi. (n,k≤100000)
n số, các phần tử dãy a (−109≤ai≤109)
k số nguyên dương x (−109≤x≤109)
Output
Gồm kk dòng, mỗi dòng chứa câu trả lời cho mỗi câu hỏi.
Sample Input
5 5 3 3 5 8 9 2 4 8 1 10
Sample Output
0 2 4 0 5