You are on page 1of 14

Bài tậ p C++ có lờ i giả i/Vòng lặ p

Tủ sách mở Wikibooks
< Bài tập C++ có lời giải

Bước tới điều hướngBước tới tìm kiếm


Bài 1: Nhập 1 số nguyên n, xuất tổng từ 1 đến n.
VD:

Inpu
Output
t

3 6

1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 int n , s = 0;
6 cin>>n;
7 for(int i = 1; i <= n; i++)
8 {
9 s = s+i;
10 }
11
12 cout << s;
13 return 0;
14 }

Bài 2: Nhập 1 số nguyên n, xuất tổng các số lẻ từ 1 đến n.


VD:

Inpu
Output
t

3 4

1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 int n , s = 0;
7 cin>>n;
8 for(int i=1; i<=n; i=i+2)
9 {
10 s = s+i;
11 }
12
13 cout << s;
14 return 0;
15 }

Bài 3: Nhập vào 1 số nguyên n, yêu cầu xuất tất cả số nguyên tố từ 1 đến n (mỗi số
cách 1 khoảng trắng), nếu không có số nào, xuất -1.
VD:

Inpu
Output
t

5 235

1 #include <iostream>
2 #include <math.h>
3 using namespace std;
4
5 int main()
6 {
7 int n;
8 cin >> n;
9 if (n > 1) {
10 for (int i = 2; i <= n; i++) {
11 int sus = 0;
12 for (int j = 1; j <= i; j++) {
13 if ((i % j) == 0)
14 sus++;
15 }
16 if (sus == 2)
17 cout << " " << i;
18 }
19 }
20 else
21 cout << -1 << endl;
22 return 0;
23 }

Bài 4: Nhập vào 1 số nguyên n, xuất ra n!.


VD:

Inpu Output
t

3 6

1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 int n , giaithua = 1;
7 cin >> n;
8 for (int i = 1; i <= n; i++) {
9 giaithua = giaithua*i;
10 }
11 cout << giaithua << endl;
12 return 0;
13 }

Bài 5: Nhập vào số i, yêu cầu xuất ra bảng cửu chương thứ i.
VD:

Input Output

2x1=2

2x2=4
2x3=6
2x4=8

2 2x5=10
2x6=12
2x7=14
2x8=16
2x9=18
2x10=20

1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 int i, j, tich;
7 cin >> i;
8 tich = 0;
9
10 for (j = 1; j <= 10; j++)
11 {
12 tich = i*j;
13 cout << i << "x" << j << "=" << tich << endl;
14 }
15 return 0;
16 }

Bài 6: Tính kết quả của phép toán 1+1/23+1/33+...+1/n3 (làm tròn 3 chữ số thập phân).
VD:

Inpu
Output
t

3 1.162

1 #include <iostream>
2 #include <iomanip>
3 using namespace std;
4 int main()
5 {
6 float i, S, n;
7 cin >> n;
8 S = 0;
9 for (i = 1; i <= n; i++) {
10 S = S + 1 / (i*i*i);
11 }
12
13 cout << setiosflags(ios :: fixed);
14 cout << setprecision(3) << S << endl;
15 return 0;
16 }

Bài 7: Tính kết quả của phép toán sau (làm tròn 3 chữ số thập phân): 
VD:

Inpu
Output
t

3 3.06
1 #include <iostream>
2 #include <stdio.h>
3 #include <iomanip>
4 using namespace std;
5 int main()
6 {
7 int n;
8 cin >> n;
9 double res = 1.0;
10 double temp = 1.0;
11 for (int i=0; i<=n; i++)
12 {
13 temp *= (2.0*(i+1.0))/(2.0*i+3.0);
14 res += temp;
15 }
16 printf("%.2f", res);
17 return 0;
18 }

Bài 8: Một cặp số nguyên dương được gọi là số bạn bè nếu tổng các ước số của số
này bằng chính số kia. Hãy viết chương trình kiểm tra xem 2 số nhập vào có phải là số
bạn bè hay không. Nếu phải thì xuất 'YES', ngược lại là 'NO'.
VD:
- 220 và 284 là cặp số bạn bè vì tổng các ước số của 220 là:
1+2+4+5+10+11+20+22+44+55+110=284 và tổng các ước số của 284 là
1+2+4+71+142=220.

Input Output

1184
YES
1210

220 284 YES

20 12 NO

1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 int a, b, sa = 0, sb = 0;
7 cin >> a >> b;
8 for (int i = 1; i < a; i++) {
9 if (a%i == 0) {
10 sa = sa + i;
11 }
12 }
13
14 for (int i = 1; i < b; i++) {
15 if (b%i == 0) {
16 sb = sb + i;
17 }
18 }
19
20 if (sa == b && sb == a) cout << "YES";
21 else cout << "NO";
22 cout << endl;
23
24 return 0;
25 }

Bài 9: Một số nguyên dương có n chữ số được gọi là số Armstrong khi tổng các lũy
thừa bậc n của các chữ số của nó bằng chính nó. Hãy kiểm tra xem một số nguyên
dương N nhập vào từ bàn phím có phải là số Armstrong hay không. Nếu phải thì xuất
'YES', ngược lại là 'NO'.
VD:

 371 là số Armstrong vì: 3^3 + 7^3 + 1^3 = 371


 8208 là số Armstrong vì: 8^4 + 2^4 + 8^4 = 8208

Inpu
Output
t

123 NO

8208 YES

1 #include <iostream>
2 #include <stdio.h>
3 #include <math.h>
4 using namespace std;
5 int main() {
6 int N;
7 while(cin >> N) {
8 int S = 0;
9 int SoChuSo = 0;
10 int p = N;
11 int q = N;
12 while(N>0) {
13 N=N/10;
14 SoChuSo += 1;
15 }
16 for(int l = 1; l <= SoChuSo ; l++) {
17 int m = p % 10;
18 p = p / 10;
19 S += pow(m , SoChuSo);
20 }
21 if (S == q)
22 cout << "YES" ;
23 else
24 cout << "NO" ;
25 }
26 return 0;
27 }

Bài 10: Hãy tìm tất cả các số Armstrong trong đoạn [A; B] với A, B là 2 số nhập từ bàn
phím. Nếu không có thì xuất -1.
VD:

Input Output

30 40 -1

8000
8208
9000

1 #include <iostream>
2 #include <math.h>
3 #include <string>
4 using namespace std ;
5 int DemCacSoChuSo (int N) {
6 return log10(N) + 1;
7 }
8
9 bool Armstrong (int N) {
10 int biendem = DemCacSoChuSo(N);
11 int ngoisao = N ;
12 int T ;
13 int TongCong = 0 ;
14 while (N) {
15 T = N % 10 ;
16 TongCong += pow (T , biendem) ;
17 N /= 10 ;
18 }
19 return TongCong == ngoisao ;
20 }
21
22 int main() {
23 int a , b , A[100] , ChuS = 0 ;
24 cin >> a >> b ;
25 if (a > b) {
26 int tm = a;
27 a = b;
28 b = tm;
29 }
30 for (int j = a ; j <= b ; j++) {
31 if (Armstrong(j)) {
32 A[ChuS++] = j;
33 }
34 }
35 if (ChuS == 0)
36 cout << "-1" ;
37 else {
38 for (int k = 0 ; k < ChuS; k++) {
39 cout << A[k] << " " ;
40 }
41 }
42 return 0;
43 }

Bài 11: Cho trước số nguyên dương n. Hãy xuất ra màn hình tất cả các bộ 3 số Pytago
mà cả 3 số đều <= n (mỗi bộ số 1 dòng và xuất theo thứ tự tăng dần của các cạnh).
- Với 3 số nguyên dương cho trước (a < b < c), nếu 3 số đó là độ dài 3 cạnh của một
tam giác vuông thì bộ 3 số này được gọi là bộ 3 số Pytago.
VD:

Inpu
Output
t

345
13 5 12 13
6 8 10

1 #include <iostream>
2 #include <cmath>
3 using namespace std;
4 int main()
5 {
6 int n,a,b,x,y,i,j,k,l,tong;
7 cin>>n;
8 a=1;
9 b=0;
10 if (n<5) cout<<-1;
11 else
12 {
13 for (i=1;i<n;i++)
14 {
15 for (j=i+1;j<n;j++)
16 {
17 double z=sqrt(i*i+j*j);
18 if((int)z==z && ( z<n || z==n))
19 cout<<i<<" "<<j<<" "<<(int)z<<endl;
20 }
21 }
22 }
23 }

Bài 12: Kiểm tra số vừa nhập có phải là số nguyên tố không.

1 #include "math.h"
2 #include "iostream"
3 using namespace std;
4 bool isprime(int) ;
5 bool isprime(int x){
6 if (x < 2) return false;
7 else{
8 int i;
9 for (i = 2; i <= sqrt(x); i++){
10 if (x%i == 0){
11 return false;
12 break;
13 }
14 }
15 if (i>sqrt(x)) return true;
16 }
17 }
18
19 int main()
20 {
21 int n;
22 cin >> n;
23 bool x = isprime(n);
24 if (x == true) cout << "true";
25 else cout << "false";
26 cout << endl;
27 return 0;
28 }

Bài 13: Kiểm tra số vừa nhập có phải là số hoàn hảo không?


- Số hoàn hảo là số mà tổng ước số của nó (không tính nó) bằng chính nó.
VD:

Inpu Output
t

6 YES

1 #include <iostream>
2 using namespace std;
3
4 bool istuc(int);
5 bool istuc(int x){
6 int s = 0;
7 for (int i = 1; i < x; i++){
8 if (x%i == 0) s += i;
9 }
10 if (s==x) return true;
11 else return false;
12 };
13
14 int main()
15 {
16 int n;
17 cin >> n;
18 if (istuc(n)==true) cout << "Yes";
19 else cout << "No";
20 cout << endl;
21 return 0;
22 }

Bài 14: Nhập vào 1 số nguyên ở hệ thập phân, yêu cầu xuất ra 1 số ở hệ nhị phân.

1 #include "iostream"
2 #include "string.h"
3 using namespace std;
4 int main()
5 {
6 long n;
7 cin >> n;
8 char s[100];
9 int t = 0;
10 while (n > 0) {
11 s[t] = '0' + n % 2;
12 t++;
13 n = n / 2;
14 }
15 s[t] = '\0';
16 for (int i = strlen(s) - 1; i >= 0; i--) {
17 cout << s[i];
18 }
19 cout << endl;
20 return 0;
21 }

Bài 15: Tìm số nhỏ nhất và lớn nhất trong mảng.

1 #include "iostream"
2 using namespace std;
3 int main()
4 {
5 int a[100];
6 int n = 0;
7 int x;
8 while (cin >> x) {
9 a[n] = x;
10 n++;
11 }
12 int maxval = a[0], minval = a[0];
13 for (int i = 1; i < n; i++) {
14 if (maxval < a[i])
15 maxval = a[i];
16 if (minval > a[i])
17 minval = a[i];
18 }
19 cout << minval << endl;
20 cout << maxval << endl;
21
22 return 0;
23 }

Bài 16: Cho biết dân số một thành phố là 5000000 người. Biết rằng tỷ lệ tăng dân số
của thành phố này là 2% mỗi năm. Hãy tính dân số của thành phố này sau n năm nữa
(n là số nguyên nhập vào từ bàn phím).

1 #include <iostream>
2 using namespace std;
3 int main() {
4 int n, soDan = 5000000;
5 cout << "So dan cua thanh pho hien tai la 5000000, moi nam tang 2% ti
le dan so. ";
6 cin >> n;
7 for (int i = 1; i <= n; i++) {
8 soDan = soDan + (soDan * 2/100);
9 }
10 cout << "\nTrong vong " << n << " nam toi, so dan cua thanh pho nay se
la " << soDan << ".";
11 return 0;
12 }

Bài 17: Giả sử chúng ta gửi vào ngân hàng một khoản tiền là 1000000đ, với lãi suất là
1.5%/tháng. Sau mỗi tháng nhập lãi vào vốn để tính cho tháng sau. Hãy tính xem sau
bao lâu chúng ta sẽ có khoản vốn lớn hơn 2000000.
1 #include <iostream>
2 using namespace std;
3 int main() {
4 int n, soTien = 1000000;
5 cout << "So tien trong ngan hang hien tai la 1.000.000, lai suat
1,5%/thang (nhap vao von khong lay ra). ";
6 while (soTien < 2000000) {
7 soTien = soTien + (soTien * 1.5/100);
8 n++;
9 }
10 cout << "\nTrong vong " << n << " thang toi, so tien von se hon
2.000.000.";
11 return 0;
12 }

Bài 18: Cho a là số thực, b là số tự nhiên. Hãy tính a^b.

1 #include <iostream>
2 using namespace std;
3 int main() {
4 float a;
5 int b;
6 long luyThua = 1;
7 cin >> a >> b;
8 cout << "a = " << a << "; " << "b = " << b << endl;
9 for (int i = 1; i <= b; i++) {
10 luyThua = luyThua * a;
11 }
12 cout << "a^b" << " = " << luyThua << endl;
13 return 0;
14 }

Bài 19: Cho số tự nhiên n. Hãy cho biết n có bao nhiêu ước số. Từ đó cho biết n có
phải là số nguyên tố hay không.

1 #include <iostream>
2 using namespace std;
3 int main() {
4 int n;
5 cin >> n;
6 if (n <= 0) {
7 cout << "Nhap lai n" << endl;
8 }
9 else {
10 int count = 0;
11 for (int i = 1; i <= n; i++) {
12 if (n % i == 0) {
13 cout << i << " ";
14 count++;
15 }
16 }
17 if (count == 2) {
18 cout << endl;
19 cout << n << " la so nguyen to." << endl;
20 }
21 else {
22 cout << endl;
23 cout << n << " khong phai so nguyen to." << endl;
24 }
25 }
26 return 0;
27 }

Bài 20: Cho hai số tự nhiên a, b. Tính ước chung lớn nhất của a và b.

1 #include <iostream>
2 using namespace std;
3 int main () {
4 int a, b, min, ucln;
5 cin >> a >> b;
6 cout << "a = " << a << ";" << " b = " << b << endl;
7 if (a == 0 || b == 0) {
8 cout << "Uoc chung lon nhat cua " << a << " va " << b << " la " <<
a+b << endl;
9 }
10 else {
11 if (a < b)
12 min = a;
13 else min = b;
14
15 for (int i = 1; i <= min; i++) {
16 if (a%i == 0 && b%i == 0)
17 ucln = i;
18 }
19 cout << "Uoc chung lon nhat cua " << a << " va " << b << " la " <<
ucln << endl;
20 }
21 return 0;
22 }

Bài 21: Cho số tự nhiên n. Tính các tổng sau:  


a) 
b) 
c) 

1 #include <iostream>
2 using namespace std;
3 int main () {
4 int n;
5 cin >> n;
6 //câu a
7 int s1 = 0;
8 for (int i = 1; i <= n; i++) {
9 s1 = s1 + i*(i+1);
10 }
11 //câu b
12 int s2 = 0;
13 for (int i = 1; i <= n; i++) {
14 s2 = s2 + i*i;
15 }
16 //câu c
17 float s3 = 0;
18 for (float i = 1; i <= n; i++) {
19 s3 = s3 + 1/i;
20 }
21 cout << "S1 = " << s1 << endl; //câu a
22 cout << "S2 = " << s2 << endl; //câu b
23 cout << "S3 = " << s3 << endl; //câu c
24
25 return 0;
26 }

You might also like