Tải bản đầy đủ (.docx) (128 trang)

KỸ THUẬT LẬP TRÌNH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.89 MB, 128 trang )

KỸ THUẬT LẬP TRÌNH
Câu 1: Ước số nguyên tố

Đề bài
Cho số nguyên nn (1≤n≤10^121≤n≤1012). Hãy đếm số lượng các ước số nguyên tố
của nn.

Dữ liệu vào
- Số lượng testcase tt (t≥1t≥1).
- Với mỗi testcase, nhập vào một số nguyên dương nn.

Dữ liệu ra
- Mỗi dòng tương ứng với một testcase ghi số các ước số ngun tố tìm được.

Ví dụ
Input #1
2
1
2

Output #1
0
1

Code:
#include<iostream>
#include<math.h>
using namespace std;
int snt ( int n){
if ( n < 2){
return 0;


}
for ( int i = 2; i <= sqrt(n); i++){
if ( n % i == 0 )
return 0;
}
return 1;
}


int main(){
int t;
cin>>t;
while(t--){
long long n;
cin>>n;
int dem=0;
for(int i=1;i<=n;i++){
if(n%i==0){
if(snt(i)){
dem++;
}
}
}
cout<}
return 0;
}

Câu 2: Số chính phương


Đề bài
Số chính phương là số có thể biểu diễn bằng bình phương của một số. Ví dụ: 9=3^2, 16=4^2.
Cho số tự nhiên k (1≤k≤18). Hãy tìm số chính phương nhỏ nhất có k chữ số và mỗi chữ số của
nó cũng là số chính phương.
Note: Số 0 là số chính phương.

Dữ liệu vào
- Số lượng testcase t(t≥1).
- Với mỗi testcase, nhập vào một số tự nhiên k.

Dữ liệu ra
- Mỗi dòng tương ứng với một testcase ghi số tìm được, nếu khơng tìm được thì ghi -1.

Ví dụ
Input #1
2
1
3


Output #1
0
100

Code:
#include <bits/stdc++.h>
using namespace std;
long long mu(int n,int k){
if(k==0)
return 1;

if(k==1)
return n;
long long x=mu(n,k/2);
if(k%2==0)
return x*x;
return x*x*n;
}
bool check(long long n){
while(n){
int c=n%10;
if(c!=1 && c!=4 && c!=9 && c!=0)
return false;
n/=10;
}
return true;
}
int main()
{
int t;cin>>t;
while(t--){
int k;cin>>k;
int count=1,tmp=0;
while(mu(count,2)long long temp = mu(count,2);
if(temp>=mu(10,k-1) && check(temp)) {
cout<tmp=1;
break;
}
count++;

}
if(tmp == 0) cout<<-1<}
}

Câu 3: Đếm số chính phương

Đề bài


Số chính phương là số có thể biểu diễn dưới dạng bình phương của một số tự nhiên (chẳng hạn
0, 1, 4, 9, 16…).

Hãy viết chương trình đếm số chính phương xen giữa hai số nguyên dương L , R (với1 ≤ L, R
≤10^18).

Dữ liệu vào
- Số lượng testcase t (t≥1).
- Với mỗi testcase, nhập vào hai số nguyên dương L và R.

Dữ liệu ra
- Mỗi dòng tương ứng với một testcase ghi số các số chính phương tìm được.

Ví dụ
Input #1
2
25
3 25

Output #1

1
4

Code:
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
long long l , r;
cin>>l>>r;
long long dem=0;
for( long long i = 0; i*i <=r; i++){
if(i*i >= l && i*i <=r){
dem++;
}
}


cout << dem << endl;
}
return 0;
}

Câu 4: Tổng các ước số

Đề bài
Cho số nguyên n (1≤n≤10^9). Hãy tính tổng các ước số nhỏ hơn n của n.


Dữ liệu vào
- Số lượng testcase t(t≥1).
- Với mỗi testcase, nhập vào một số nguyên dương n.

Dữ liệu ra
- Mỗi dòng tương ứng với một testcase ghi tổng các ước số tìm được.

Ví dụ
Input #1
2
1
4

Output #1
0
3

Code:
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin >> t;
while(t--){
long long n;
cin >> n;
if(n > 1){
long long s = 1;
for (int i = 2; i <= sqrt(n); i++)



if (n % i == 0){
s+=i;
if(i!=n/i)
s+=n/i;
}
cout <}
else cout <<0<}
return 0;
}

Câu 5: Số Amstrong

Đề bài
Số Armstrong là số mà từng chữ số trong số đó lũy thừa với số chữ số của nó bằng chính nó.
Ví dụ: 153 là số Armstrong vì153=1^{3}+5^{3}+3^{3}153=13+53+33
Cho số nguyên n(1\leq n\leq 10^{18})n(1≤n≤1018). Hãy kiểm tra n có phải là số
Armstrong hay khơng?

Dữ liệu vào
- Số lượng testcase t(t≥1).
- Với mỗi testcase, nhập vào một số nguyên dương n.

Dữ liệu ra
- Mỗi dòng tương ứng với một testcase ghi sốxvớix=1 nếu đó là số Armstrong,x=0 nếu khơng
phải.

Ví dụ

Input #1
2
153
137

Output #1
1
0


Code:
#include<bits/stdc++.h>
using namespace std;
int socs(int k) {
int so = 0;
while (k > 0) {
k = k / 10;
so++;
}
return so;
}
bool isAmstrong(int k) {
int tmp = k;
int soMu = socs(k);
int tong = 0;
while (k > 0) {
int t = k % 10;
int mut = pow(t, soMu);
tong += mut;
k /= 10;

}
if (tong == tmp) return true;
return false;
}
int main(){
int t; cin >> t;
while(t--){
int n;
cin >> n;
if(isAmstrong(n))
cout << "1" << endl;
else
cout<< "0" << endl;
}
}

Câu 6: Số hồn hảo

Đề bài
Số hồn hảo (hay cịn gọi là số hoàn chỉnh, số hoàn thiện hoặc số hoàn thành) là một số nguyên
dương mà tổng các ước nguyên dương chính thức của số đó (ngoại trừ số đó) bằng chính nó. Ví
dụ: 6 có tổng các ước số khơng tính nó là: 1+2+3 =6 nên 6 là số hồn hảo.
Cho số nguyên n (1≤n≤10^18). Hãy kiểm tra xem n có phải là số hồn hảo hay khơng?

Dữ liệu vào
- Số lượng testcase t(t≥1).


- Với mỗi testcase, nhập vào một số nguyên dương n.


Dữ liệu ra
- Mỗi dòng tương ứng với một testcase ghi số x với x=1 nếu đó là số hồn hảo, x=0 nếu khơng
phải.

Ví dụ
Input #1
2
15
6

Output #1
0
1

Code:
#include<bits/stdc++.h>
using namespace std;
int sohoanhao(int n){
int sum = 0;
if(n == 1)
return sum;
for(int i = 2; i <= sqrt(n); i++){
if( n % i == 0){
if(i == (n/i))
sum+=i;
else
sum += i + n/i;
}
}
return sum +1;

}
int main(){
int t;
cin >> t;
while ( t--){
int n;
cin >> n;
if(sohoanhao(n) == n)
cout << 1 << endl;
else
cout << 0 << endl;


}
return 0;
}

Câu 7: Đa thức tổng

Đề bài
Với số nguyên dương n(1≤n≤20) và số thực x. Tính giá trị biểu thức:

S(x,n)=∑k=1n∑i=1kjxk

Dữ liệu vào
- Số lượng testcase t (t≥1).
- Với mỗi testcase, nhập vào 2 số theo tuần tự số nguyên dương n và số thực x. Mỗi số cách nhau
bởi ít nhất một dấu cách.

Dữ liệu ra

- Mỗi dòng tương ứng với một testcase ghi một giá trị của S(x,n)với 3 chữ số sau dấu phẩy.

Ví dụ
Input #1
2
10 0.0
21

Output #1
0.000
1.333

Code:
#include<bits/stdc++.h>
using namespace std;
int tongmu(float x, int k){
float mu = 0;
if(x==0)
return 0 ;
if(k==0)
return 1;
if(k==1)


return x;
else return tongmu(x, k-1)*x;
}
int tongj(int k){
int j = 0;
for(int i = 1 ; i<=k;i++){

j+=i;
}
return j;
}
int main(){
int t;
cin >> t;
while(t--){
float x;
int n ;
cin >> n >> x;
float sum = 0;
for(int k = 1; k<=n;k++){
sum += (float) tongmu(x,k) / (tongj(k));
}
printf("%.3f\n", sum);
}
}

Câu 8: Biểu thức tổng giai thừa

Đề bài
Với số nguyên dương n (1≤n≤20) và số thựcx. Tính giá trị biểu thức:

S(x,n)=\sum_{k=1}^{n}\frac{x^{k}}{k!}S(x,n)=k=1∑nk!xk

Dữ liệu vào
- Số lượng testcase t(t≥1).
- Với mỗi testcase, nhập vào 2 số theo tuần tự số nguyên dương n và số thực x. Mỗi số cách nhau
bởi ít nhất một dấu cách.


Dữ liệu ra
- Mỗi dòng tương ứng với một testcase ghi một giá trị của S(x,n)với 3 chữ số sau dấu phẩy.

Ví dụ
Input #1


2
10 0
2 1.0

Output #1
0.000
1.500

Code:
#include<bits/stdc++.h>
using namespace std;
int tongmu(float x, int k){
float mu = 0;
if(x==0)
return 0 ;
if(k==0)
return 1;
if(k==1)
return x;
else return tongmu(x, k-1)*x;
}
long long gthua(int k){

long long gt = 1;
if(k==0 || k==1)
return gt;
for(int i = 2; i <= k;i++){
gt*=i;
}
return gt;
}
int main(){
int t;
cin >> t;
while(t--){
float x;
int n ;
cin >> n >> x;
float sum = 0;
for(int k = 1; k<=n; k++){
sum+=(float) tongmu(x,k) / (gthua(k));
}
printf("%.3f\n",sum);
}
}

Câu 9: Biểu thức căn-giai thừa


Đề bài
Với số nguyên n(1≤n≤20) và số thực x (x≥0). Tính giá trị biểu thức:

\large S(x,n)=\sqrt{x^{n}+\sqrt{x^{n1+...\sqrt{x^{2}+\sqrt{x}}}}}S(x,n)=xn+xn−1+...x2+x

(S(x, n) có n dấu căn).

Dữ liệu vào
- Số lượng testcase t(t≥1).
- Với mỗi testcase, nhập vào một số nguyên dương n và số thực x.

Dữ liệu ra
- Mỗi dòng tương ứng với một testcase ghi một giá trị của S(n) với 3 chữ số sau dấu phẩy.

Ví dụ
Input #1
2
1 1.0
20

Output #1
1.000
0.000

Code:
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n;
float x;
cin>>n>>x;
float s=0;

float P=1;
for(int i=1;i<=n;i++){
P=P*x;
s = pow((P + s) * 1.0, 1.0/2);


}
printf("%.3f\n", s);
}
}

Câu 10: Lũy thừa dư

Đề bài
Cho hai số nguyên dương aa và nn với 1≤a, n≤10^91≤a,n≤109. Tính phần dư của phép
tính a^nan chia cho 10^9 + 7109+7.

Dữ liệu vào
Số lượng testcase tt (t≥1t≥1).
Với mỗi testcase, hai số nguyên dương aa và nn cách nhau bởi dấu cách.

Dữ liệu ra
Mỗi dịng tương ứng với một testcase ghi kết quả tìm được.

Ví dụ
Input #1
2
1 1000
57


Output #1
1
78125

Code:
#include <bits/stdc++.h>
using namespace std;
int mod = 1e9+7;
long long powerMod(int n,int k){
if(k==0)
return 1;
long long x = powerMod(n,k/2);
if(k%2==0) return x*x%mod;
return n*(x * x % mod) % mod;
}
int main(){


int t,n,k;
cin >> t;
while(t--){
cin >> n>>k;
cout << powerMod(n,k)<}
}

Câu 11: Đếm số nguyên tố hoàn toàn

Đề bài
Số nguyên tố hoàn toàn (full prime) là số nguyên tố mà mỗi chữ số của nó cũng là số nguyên tố.

Hãy đếm số các số nguyên tố hoàn toàn nhỏ hơn hoặc bằng một giá trị nguyên dương n cho
trước (1≤n≤10^6).

Dữ liệu vào
Số lượng testcase t (t≥1). Với mỗi testcase, nhập vào một số nguyên dương n.

Dữ liệu ra
Mỗi dòng tương ứng với một testcase ghi số lượng số ngun tố hồn tồn tìm được.

Ví dụ
Input #1
2
1 100

Output #1
0
8

Code:
#include<iostream>
#include<math.h>
using namespace std;
int snt(long long n){
if ( n < 2)
return 0;
else {
for(int i = 2 ; i <= sqrt(n); i++){
if( n% i == 0)
return 0;



}
return 1;
}
}
int chusont(long long n){
while (n > 0){
int t = n % 10;
if(t !=2 && t != 3 && t != 5 && t != 7)
return 0;
n /= 10;
}
return 1;
}
int main(){
int t;
cin >> t;
while(t--){
long long n , dem = 0;
cin>>n;
for (int i = 1; i<=n; i++){
if(chusont(i) == 1 && snt(i) == 1)
dem ++;
}
cout << dem <<"\n";
}
}

Câu 12: Biểu thức căn- giai thừa


Đề bài
Với số nguyên n(1≤n≤20). Tính giá trị biểu thức:

S(n) = \sqrt[n+1]{n!+\sqrt[n]{(n-1)!+...\sqrt[3]{2!+\sqrt{1!}}}}S(n)=n+1n!
+n(n−1)!+...32!+1!
(S(n) có n dấu căn).

Dữ liệu vào
- Số lượng testcase t(t≥1).
- Với mỗi testcase, nhập vào một số nguyên dương n.

Dữ liệu ra
Mỗi dòng tương ứng với một testcase ghi một giá trị củaS(n)với 3 chữ số sau dấu phẩy.

Ví dụ


Input #1
2
1
2

Output #1
1.000
1.442

Code:
#include<bits/stdc++.h>
using namespace std;
long long gthua(long long k){

long long gt = 1;
if(k==0 || k==1)
return gt;
for(int i = 2; i <= k;i++){
gt*=i;
}
return gt;
}
float cangt(long long k){
if(k == 1)
return 1.0;
return pow((float)gthua(k) + cangt(k-1),1.0/((float)k+1.0));
}
int main(){
int t;
cin >> t;
while(t--){
int k ;
cin >> k ;
printf("%.3f\n", cangt(k));
}
return 0;
}

Câu 13: Chuyển đổi nhị phân sang thập phân

Đề bài
Cho một số nguyên dương trong hệ nhị phân (hệ cơ số 2). Hãy chuyển đổi số đó trong hệ cơ
số10.



Dữ liệu vào
- Số lượng testcase tt (10^5≥t≥1105≥t≥1).
- Với mỗi testcase, mỗi dịng chứa một xâu nhị phân có độ dài khơng vượt q 63.

Dữ liệu ra
- Mỗi dịng tương ứng với một testcase ghi kết quả tìm được.

Ví dụ
Input #1
3
101
111
1010

Output #1
5
7
10

Code:
#include<iostream>
using namespace std;
int main(){
int t;
cin >> t;
while(t--){
string str;
cin >> str;
unsigned long long T = 0;

int len = str.size();
for(int i = 0; iT=(T<<1)+(str[i]-48);
cout << T << endl;
}
return 0;
}

Câu 13: Đếm số nguyên tố


Đề bài
Cho hai số nguyên dương LL và RR (1≤L≤R≤10^61≤L≤R≤106). Hãy đếm số lượng số
nguyên tố nằm trong khoảng từ LL đến RR.

Dữ liệu vào
Số lượng testcase tt (t≥1t≥1). Với mỗi testcase, nhập vào hai số nguyên dương LL và RR.

Dữ liệu ra
Mỗi dòng tương ứng với một testcase ghi số lượng số ngun tố tìm được.

Ví dụ
Input #1
2
26
11 14

Output #1
3
2


Code:
#include<bits/stdc++.h>
using namespace std;
int main(){
long long t;
cin >>t;
while(t--){
int n = 1e6-1;
bool prime[n + 1];
for (int i = 2; i <= n; i++) {
prime[i] = true;
}
for (int i = 2; i <= n; i++) {
if (prime[i] == true) {
for (int j = 2 * i; j <= n; j += i) {
prime[j] = false;
}
}
}
int l,r;


cin >> l>>r;
int dem=0;
for(int i=l;i<=r;i++){
if(prime[i]==1){
dem++;
}
}

cout<< dem <}
return 0;
}

Câu 14: Đổi hệ thập phân sang hệ nhị phân

Đề bài
Hệ thập phân (cơ số 10) là hệ cơ số mà con người chúng ta sử dụng hàng ngày trong cuộc sống.
Thế nhưng, chiếc máy tính của chúng ta lại chỉ có thể làm việc với hệ nhị phân (cơ số 2).
Ví dụ: 8_{10} = 1000_{2} = 1*2^3 + 0*2^2 + 0*2^1 + 0*2^0
Cho một số nguyên dương n trong hệ cơ số 10 (1≤n≤10^18), hãy viết số đó trong hệ cơ số 2 (hệ
nhị phân).

Dữ liệu vào
Số lượng testcase t (t≥1). Với mỗi bộ test, nhập vào số nguyên dương n.

Dữ liệu ra
Với mỗi số nguyên dương n trong hệ thập phân, in ra trên một dòng xâu nhị phân biểu diễn số đó
trong hệ nhị phân (khơng bắt đầu bởi số 0).

Ví dụ
Input #1
3
5
7
10

Output #1
101



111
1010

Code:
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
long long n,du;
cin>>n;
stack<int> s;
while(n){
du = n%2;
s.push(du);
n/=2;
}
while(!s.empty()) {
cout << s.top();
s.pop();
}
cout << endl;
}
}

Câu 15: Đếm số nguyên tố hoàn toàn


Đề bài
Số nguyên tố hoàn toàn (full prime) là số nguyên tố mà mỗi chữ số của nó cũng là số nguyên tố.
Hãy đếm số các số nguyên tố hoàn toàn nhỏ hơn hoặc bằng một giá trị nguyên dương n cho
trước (1≤n≤10^6).

Dữ liệu vào
Số lượng testcase t (t≥1). Với mỗi testcase, nhập vào một số nguyên dương n.

Dữ liệu ra
Mỗi dòng tương ứng với một testcase ghi số lượng số ngun tố hồn tồn tìm được.

Ví dụ
Input #1
2


1 100

Output #1
0
8

Code:
#include<iostream>
#include<math.h>
using namespace std;
int snt(long long n){
if ( n < 2)
return 0;
else {

for(int i = 2 ; i <= sqrt(n); i++){
if( n% i == 0)
return 0;
}
return 1;
}
}
int chusont(long long n){
while (n > 0){
int t = n % 10;
if(t !=2 && t != 3 && t != 5 && t != 7)
return 0;
n /= 10;
}
return 1;
}
int main(){
int t;
cin >> t;
while(t--){
long long n , dem = 0;
cin>>n;
for (int i = 1; i<=n; i++){
if(chusont(i) == 1 && snt(i) == 1)
dem ++;
}
cout << dem <<"\n";
}
}


Câu 16: Liệt kê hoán vị

Đề bài
Cho tập hợp A = {1, 2, …, n} với 1≤n≤15. Liệt kê các hoán vị của A.


Dữ liệu vào
Số lượng testcase t (t≥1). Với mỗi testcase, nhập vào một số nguyên dương n.

Dữ liệu ra
Tương ứng với mỗi testcase, ghi mỗi dịng là một hốn vị của tập A, các hoán vị liệt kê theo thứ
tự từ điển tăng dần, mỗi số trên một dòng cách nhau bởi một dấu cách.

Ví dụ
Input #1
1
2

Output #1
1
12
21

Code:
#include<bits/stdc++.h>
using namespace std;
short int n;
short int a[15 + 1];
bool check[15 + 1] = { 0 };
void Try(int i)

{
for (int j = 1; j <= n; j++)
{
if (check[j] == 0)
{
a[i] = j;
check[j] = 1;
}
else
continue;
if (i < n)
Try(i + 1);
if (i == n)
{
for (short int k = 1; k <= n; k++)
cout << a[k] <<(k

}
check[j] = 0;
}
}
int main()
{
int t;
cin >> t;
while(t--){
cin >> n;
Try(1);
}

return 0;
}

Câu 17: Đếm số chữ số

Đề bài
Viết chương trình đếm số lượng chữ số của một số nguyên nn nhập từ bàn phím
(∣nn∣≤10^{1000}101000).

Dữ liệu vào
Số lượng testcase tt (t≥1t≥1). Với mỗi testcase, nhập vào một số nguyên nn.

Dữ liệu ra
Mỗi dòng tương ứng với một testcase ghi một chữ số nguyên là số chữ số đếm được.

Ví dụ
Input #1
2
-1
234452

Output #1
1
6

Code:
#include <bits/stdc++.h>
using namespace std;



int main(){
int t; cin >> t;
while(t--){
string S;
cin >> S;
if (S[0] == '-')
cout << S.length() - 1 << endl;
else
cout << S.length() << endl;
}
return 0;
}

Câu 18: DAYSO0010-Tìm thẻ bị thiếu
Để chuẩn bị cho một sự kiện quan trọng tổ chức trong hội trường có nhiều dãy và mỗi dãy bố trí
được cho N đại biểu tham dự, các bạn sinh viên Khoa Viễnthông I đã lên danh sách mời các đại
biểu tham dự và đánh số giấy mời cho mỗi đại biểu trong dãy theo thứ tự tăng dần từ số thứ tự
của giấy mời đầu tiên của dãy là L (1≤N≤10^8)(1≤N≤108).
Trong ngày tổ chức, các đại biểu tham dự đã đưa lại giấy mời và vào trong hội trường. Do khâu
tổ chức chưa thực sự tốt, các giấy mời của vị đại biểu chỉ được thu theo dãy nhưng không được
sắp xếp lại theo thứ tự ghi trên giấy mời. Đã đến giờ khai mạc nhưng có một dãy có số thứ tự bắt
đầu từ L mới chỉ có đúng N-1 đại biểu tham dự. Hãy viết chương trình giúp các bạn sinh viên
Khoa tìm được giấy mời của vị đại biểu vắng mặt để kịp liên hệ.
Ví dụ:N=5, số bắt đầu danh sách là 2 danh sách giấy mời của các đại biểu tham dự = {6, 2, 3,
5}Đại biểu số 4 vắng mặt.

Dữ liệu vào
-Số lượng testcase t.
- Với mỗi testcase, nhập vào N và L là số giấy mời đã phát cho các đại biểu và số thứ tự giấy
mời đầu tiên của của dãy và một tập N-1 giấy mời thu được từ các đại biểu đã đến với số thứ tự

khác nhau nằm trong khoảng từ Lđến L+N.

Dữ liệu ra
- Mỗi dòng tương ứng một testcase, cho biết số thứ tự giấy mời của đại biểu vắng mặt.

Ví dụ
Input #1
2


61
12356
45
685

Output #1
4
7

Code:
#include<bits/stdc++.h>
using namespace std;
int main(){
int t; cin >> t;
while(t--){
int n,l;
cin >> n >>l;
unsigned long long s,si = 0;
s=(unsigned long long)n*(2*l+n-1)/2;
for(int i = 0; i < n-1;i++){

int ai;
cin >> ai;
si+=ai;
}
cout << (s-si)<< endl;
}
}

Câu 19: COBAN008- Tổng hai số lớn
Cho hai số ngun khơng âm a và b có số chữ số khơng q 100. Hãy tính tổng hai số.

Dữ liệu vào
Số lượng testcase t (t≥1). Với mỗi testcase, nhập vào hai số ngun khơng âm a và b.

Dữ liệu ra
Mỗi dịng tương ứng với một testcase ghi kết quả tổng tìm được.

Ví dụ
Input #1
2


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×