Note Đóng lại

Bài tập lập trình C/C++ có lời giải chi tiết

Tài Liệu Blog

LỜI GIẢI CHI TIẾT CHỈ MANG TÍNH CHẤT THAM KHẢO CHO CÁC NEWBIE CHƯA PHẢI THẬT SỰ LÀ THUẬT TOÁN TỐI ƯU NHÉ(Các bác bỏ qua cho nhé)!

Bài 1.Nhập đúng password là một số sử dụng cấu trúc lặp do..while.
Code:
// Đăng nhập password
#include"stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;

int main(void) 
{
int number = 1001, pass;
do {
system("cls");//xóa màn hình
..............
return 0;
}
Code chi tiết: Tải về

Bài 2.Hãy viết chương trình liệt kêt tất cả các số tự nhiên K thỏa mãn đồng thời những điều kiện dưới đây:
a)K là số có N chữ số;
b)K là số nguyên tố;
c)Đảo ngược các chữ số trong K là một số nguyên tố;
d)Tổng các chữ số trong K cũng là một số nguyên tố;


e)Mỗi chữ số trong K cũng là các số nguyên tố.


Code:
// Bài 2
#include"stdafx.h"
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
//K là số nguyên tố
int ngto(int n)
{
if (n < 2) return 0;
else
{
int i;
for (i = 2; i < sqrt(n); i++)
{
if (n%i == 0) return 0;
}
return 1;
}
}
/*Đảo ngược các chữ số trong K 
Kiểm tra ngtố từng chữ số
Kiểm tra tổng chữ số
*/
Code chi tiết:  Tải về


Bài 3.Hãy viết chương trình liệt kêt tất cả các số tự nhiên K thỏa mãn đồng thời những điều kiện dưới đây:
a)K số N chữ số;
b)K số đối xứng;
c)Tổng các chữ số của K số chia hết cho 10;


d)Các chữ số của K đều khác 0.

Code:

#include"stdafx.h"
#include<iostream>
#include<cmath>
using namespace std;
int sodoixung(int n)
{
       int m, i;
       m = n;
       int sochuso = 0;
       while (n > 0)
       {
             n /= 10;
             sochuso++;
       }
       int A[100], dem = 0, dem1 = 0;
       while (m > 0)
       {
             A[dem] = m % 10;
             dem++;
             m /= 10;
       }
       for (i = 0; i < dem; i++)
       {
             if (A[i] == A[dem - i - 1])
             {
                    dem1++;
             }
       }
       if (dem1 == sochuso) return 1;

}

Code chi tiết: Tải về


Bài 4.Nhân dịp phát hành các số điện thoại 0919xxx.xxx. Công ty Vinaphone dự định phát phát hành N số điện thoại loại 1, M số điện thoại loại 2, K số điện thoại loại 3. Trong đó, số điện thoại loại 1, 2, 3 được định nghĩa như sau:
          Loại 1: là những số điện thoại có sáu số cuối cùng của nó tạo thành một số đối xứng (thuận nghịch) có sáu chữ số.
          Loại 2: là những số điện thoại loại 1 có sáu số cuối cùng của nó là các chữ số khác 0.
          Loại 3: là những số điện thoại loại 2 có tổng của sáu chữ số cuối cùng là một số chia hết cho 10.


          Bài toán được đặt ra là: cho một phương án phát hành N, M, K. Hãy cho biết công ty Vinaphone có thể thực hiện được phương án phát hành kể trên hay không? Đưa ra kết quả “YES” nếu phương án phát hành thực hiện được, đưa ra kết quả “NO” nếu phương án phát hành không thể thực hiện được.    
Code:
// 0919XXX.XXX
#include"stdafx.h"
#include<iostream>
#include<cmath>
using namespace std;
int sodoixung(int n)
{
    int m, i,l;
    m = n;
    l = n;
    int sochuso = 0;
    while (n > 0)
    {
        n /= 10;
        sochuso++;
    }
    int A[100], dem = 0, dem1 = 0;
    while (m > 0)
    {
        A[dem] = m % 10;
        dem++;
        m /= 10;
    }
    for (i = 0; i < dem; i++)
    {
        if (A[i] == A[dem - i - 1])
        {
            dem1++;
        }
    }
    if (dem1 == sochuso) return l;

}

Code chi tiết : Tải về


Bài 4.Liệt kê các tổ hợp chập K của 1, 2,..,N. Ví dụ với N=5, K =3 ta có kết quả sau:
       1   2   3          1   3   5                2   4   5
       1   2   4          1   4   5                3   4   5
       1   2   5          2   3   4


       1   3   4          2   3   5

Code:
#include "stdafx.h"
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
int k, n;
int A[1000];
void result()
{
    for (int i = 1; i <= k; i++)
    {
        cout << setw(3) << A[i];
    }
    cout << endl;
}
void Back(int i)
{
    for (int j = A[i - 1] + 1; j <= n - k + i; j++)
    {
        A[i] = j;
        if (i == k)
        {
            result();
        }
        else
        {
            Back(i + 1);
        }
    }
}

Code chi tiết : Tải về

Bài 5.Tính giá trị nhỏ nhất của str sau khi loại bỏ k phần tử (str là xâu kí tự bao gồm các ký tự từ A đến Z,giá trị của str là tổng bình phương số lần xuất hiện mỗi kí tự)
Vd: S="ABBCCC",f(S)=1^2+2^2+3^2
k=2,fmin(S)=1^2+2^2+1^2

Code: 


  1. #include<iostream>
  2. #include<cstring>
  3. #include<cmath>
  4. using namespace std;
  5. char str[100],B[100];
  6. void sapxep(int D[100],int dem2)//Hàm sắp xếp lại mảng tăng dần khi bớt lần lượt k
  7. {
  8.     int bientam;
  9.     for (int i = 0; i < dem2; i++)
  10.     {
  11.         for (int j = i + 1; j < dem2; j++)
  12.         {
  13.             if (D[i] < D[j])
  14.             {
  15.                 bientam = D[i];
  16.                 D[i] = D[j];
  17.                 D[j] = bientam;
  18.             }
  19.         }
  20.     }
  21. }
  22. void solan(int k)//Hàm chính của
  23. {
  24.     int C[100],dem1=0,tong=0;
  25.     int i;
  26.     for (= 0; i < strlen(str); i++)//Tạo một mảng chưa đánh dấu
  27.     {
  28.         B[i] = 1;
  29.     }
  30.     for (= 0; i < strlen(str); i++)//Liệt kê số lần xuất hiện của mỗi kí tự ném vào mảng C
  31.     {
  32.         if (B[i])
  33.         {
  34.             int dem = 1;
  35.             B[i] = 0;
  36.             for (int j = i + 1; j < strlen(str); j++)
  37.             {
  38.                 if (str[i] == str[j])
  39.                 {
  40.                     dem++;
  41.                     B[j] = 0;
  42.                 }
  43.             }
  44.             C[dem1] = dem;
  45.             dem1++;
  46.         }
  47.     }..................
Code chi tiết : Tải về
Bài 6.Hoán vị của n phần tử
Code:
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int n, A[100],chuaxet[100];
void Init()
{
cout << "Nhap n: ";
cin >> n;
for (int i = 1; i <= n; i++)
{
chuaxet[i] = true;
}
}
Code chi tiết: Tải về
Bài 7.Cho dãy số A[]=(a1,...an) và số tự nhiên k.Hãy liệt kê tất cả các dãy con của A[] sao cho tổng các phần tử đúng =k?
Ex:
Input:                                                             Output:
5  50                                                               5  20  25
5 10 15 20 25                                                 5  10  15  20
                                                                       10  15  25

Code:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int n, A[100],X[100],k, OK = true;
void Init()
{
int i;
cout << "Nhap so phan tu: ";
cin >> n;
cout << "Nhap tong k: ";
cin >> k;
cout << "Nhap lan luot cac phan tu: ";
for (i = 1; i <= n; i++)
{
cin >> A[i];
}
for (i = 1; i <= n; i++)
{
X[i] = 0;
}

}
void Key()
{
int i = n;
while (i > 0 && (X[i] != 0))
{
X[i] = 0;
i--;
}
if (i > 0)
{
X[i] = 1;
int S = 0;
for (i = 1; i <= n; i++)
{
S = S + A[i] * X[i];
}

Code chi tiếtTải về
Bài 8.Cho xâu kí tự S.Hãy tìm kí tự xuất hiện nhiều nhất
VD: S[]="ABCDABBB"
Output:
B 4
Code:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char A[100], B[100];
cin>> A;
int n = strlen(A);
for (int i = 0; i < n; i++)
{
B[i] = 1;
}
int C[100];
for (int i = 0; i < n; i++)
{
C[i] = 1;
if (B[i])
{
B[i] = 0;
for (int j = i + 1; j < n; j++)
{
if (A[i] == A[j])
{
B[j] = 0;
C[i]++;
}
}
}

}................................
Code chi tiết: Tải về
Bài 9.Viết chương trình xây dựng các thao tác trên đa thức.
Code:

//Pn(x),Qm(x).
#include"stdafx.h"
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int n,m;
int A[100], B[100];//A[] mag cac he so cua P,B[] mag cac he so cua Q
void nhap()
{
int i;
cout << "Nhap bac cua P(x): ";
cin >> n;
cout << "Nhap he so P(x): ";
for (i = 0; i <=n; i++)
{
cin >> A[i];
}
cout << "Nhap bac cua Q(x): ";
cin >> m;
cout << "Nhap he so cua Q(x): ";
for (i = 0; i <= m; i++)
{
cin >> B[i];
}
}
void b()
{
int x0,x1=0,i;
cout << "Nhap x0: ";
cin >> x0;
cout << "Pn(x0)= ";
for (i = 0; i <= n; i++)
{
x1 = x1 + A[i] * (int)pow(x0, n - i);
}
cout << x1 << endl;
}
void daoham()
{
int i;
cout << "Dao ham cua Pn(x) la: ";
for (i = 0; i < n; i++)
{
cout << (n - i)*A[i] << "*x^" << (n - 1 - i)<<"+";
if (i == n - 1)
{
cout << "0";
}
}
cout << endl;
}......................
Code chi tiết: Tải về

Bài10. Viết chương trình tính tích 2 ma trận M,N
Code:

// codetrenblog.cpp : Defines the entry point for the console application.
#include"stdafx.h"
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int hangA, cotA, hangB, cotB;
int A[100][100], B[100][100];
int matrantich[20][20];
void nhap()
{
int i, j;
cout << "Ma tran A cap: ";
cin >> hangA >> cotA;
cout << "Nhap ma tran A: ";
for (i = 0; i < hangA; i++)
{
for (j = 0; j < cotA; j++)
{
cin >> A[i][j];
}
}
cout << "Ma tran B cap: ";
cin >> hangB >> cotB;
cout << "Nhap ma tran B: ";
for (i = 0; i < hangB; i++)
{
for (j = 0; j < cotB; j++)
{
cin >> B[i][j];
}
}

}
void tichmatran()
{
int i, j,k;
for (i = 0; i < hangA; i++)
{
for (j = 0; j < cotB; j++)
{
matrantich[i][j] = 0;
for (k = 0; k < cotA; k++)
{
matrantich[i][j] += A[i][k] * B[k][j];
}
}
}...............
Code chi tiết: Tải về
Bài 11.Hình chữ nhật gồm m*n hình vuông đơn vị
Hình chữ nhật gồm m*n hình vuông đơn vị.Hãy liệt kê tất cả các đường đi từ ô cuối cùng góc trái đến ô trên cùng góc phải. Biết mỗi bước đi chỉ đi được 1 đơn vị
Code:
/*Hinh chữ nhật gồm m*n hình vuông đơn vị.Hãy liệt kê tất cả các đường đi từ ô cuối cùng góc trái đến ô trên cùng góc phải.
Biết mỗi bước đi chỉ đi được 1 đơn vị.*/
#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;
int A[100], OK = true, n, m;
void Init()
{
cout << "Nhap so hang don vi: ";
cin >> m;
cout << "Nhap so cot don vi: ";
cin >> n;
for (int i = 1; i <= m + n; i++)
{
A[i] = 0;
}
}
void Result()
{
for (int i = 1; i <= n + m; i++)
{
cout << setw(3) << A[i];
}
cout << endl;

}
........................
Code chi tiết: Tải về
Bài 11.Hoán vị pp quay lui(Liệt kê hoán vị dãy 1.....n)
Code:
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int n, A[100],chuaxet[100];
void Init()
{
cout << "Nhap n: ";
cin >> n;
for (int i = 1; i <= n; i++)
{
chuaxet[i] = true;
}
}
void Result()
{
for (int i = 1; i <= n; i++)
{
cout << setw(3) << A[i];
}
cout << endl;
}
void Hoanvi(int i)
{
for (int j = 1; j <= n; j++)
{
if (chuaxet[j])
{
A[i] = j;
chuaxet[j] = false;
if (i == n)
{
Result();
}
else
{
Hoanvi(i + 1);
}
chuaxet[j] = true;
}
}
}
int main()
{
Init();
Hoanvi(1);
return 0;

}
Bài 12.Cho dãy số A[n]=(a1,a2,.....,an).Hãy liệt kê tất cả các dãy số có thể 
tạo ra từ dãy An bằng cách tráo đổi các phần tử khác nhau sao cho tổng
2 phần tử liên tiếp bất kỳ đều là một số nguyên tố
Input:                   Output:
n=6                      9,8,5,12,7,6     
An=(9,7,12,8,6,5)
Code:
#include"stdafx.h"
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int chuaxet[100], n, A[100],B[100];
int ngto(int n)
{
int i;
if (n == 1 || n == 0) return 0;
if (n == 2) return 1;
else
{
for (i = 2; i < n; i++)
{
if (n%i == 0)
{
return 0;
}
}
return 1;
}
}
void Init()
{
int i;
cout << "Nhap n: ";
cin >> n;
cout << "Nhap lan luot cac phan tu: ";
for (i = 1; i <= n; i++)
{
cin >> A[i];
}
for (i = 1; i <= n; i++)
{
chuaxet[i] = true;
}
}
void Result()
{
int i;
for (i = 1; i <= n; i++)
{
cout << setw(3) << B[i];
}
cout << endl;

}
........................
Code chi tiếtTải về
Bài 12.
Cho số tự nhiên N. Hãy viết chương trình chuyển đổi số tự nhiên n thành số ở hệ cơ số b (2<=b<=32).
Dữ liệu vào (Input) cho bởi file data.txt theo khuôn dạng:
•Dòng đầu tiên ghi lại số tự nhiên K là số lượng các test (k<=100).
• K dòng kế tiếp ghi lại mỗi dòng một test. Mỗi test bao gồm một cặp số N, b. Hai số được viết cách nhau một vài khoảng trống.
Kết quả ra (Output): ghi lại K dòng trong file Output.txt, mỗi dòng ghi lại bộ ba số n, k, x. Trong đó x là số ở hệ cơ số b được chuyển đổi từ n. Ví dự dưới đây minh họa cho file input và output của bài toán.
Input.txt                      Output.txt
5                                       
8  2                                  8  2 1000    
32  16                              32  16 20
255  16                            255  16 FF
100  10                            100  10 100
64  32                              64  32 20
Code:
#include<iostream>
#include<cmath>
#include<string>
#include<fstream>
using namespace std;
int main()
{
ifstream FileIn;
FileIn.open("C:\\Users\\VIET HOANG\\Desktop\\Input.txt");
int n;
FileIn >> n;
int A[100][100],B[100][100];
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= 2; j++)
{
FileIn >> A[i][j];
B[i][j] = A[i][j];
}
}
FileIn.close();
Code chi tiết: Tải về
Bài 12.Cho hai file Data1.in Data2.in. Hãy viết chương trình tập từ số lần xuất hiện mỗi từ của cả hai file. dụ dưới đây sẽ minh họa cho Inpu Output của bài toán.
  Data1.in                         Data2.in                                
  AB   AC  AD  AE  AF      AB   AC   AD  AG  AH  
  AB   AC  AD  AE  AF      AB   AC   AD  AG  AH  
 Ketqua.out  
 7
 AB  4
 AC  4
 AD  4
 AE  2 
 AF  2
 AG  2
 AH  2
Code:
  1. #include<iostream>
  2. #include <string.h>
  3. using namespace std;
  4. #define MAX 1000
  5. #define MAXLENGTH 20
  6. struct TU
  7. {
  8.     char noidung[MAXLENGTH];
  9.     int dem;
  10. };
  11. TU danhsach[MAX];
  12. int main()
  13. {
  14.     int sophantu = 0,sophantufile1=0;
  15.     char phantufile1[MAXLENGTH];
  16.     //B1:Copy file 1 sang file 2
  17.     ifstream File1;
  18.     File1.open("C:\\Users\\VIET HOANG\\Desktop\\Data1.in", ios_base::in);
  19.     ofstream File2;
  20.     File2.open("C:\\Users\\VIET HOANG\\Desktop\\Data2.in", ios_base::app);
  21.     char line[255];
  22.         while (!File1.eof()) { //Lap den cuoi file
  23.                 File1.getline(line, 80);//doc mot dong
  24.                 cout<<line<<endl;//dua ra noi dung f1
  25.                 File2<<" "<<line<<endl; //ghi dong line vao f2;
  26.         }
  27.     File1.close();//dong file f1
  28.     File2.close();//dong file f2
  29.     //B2:Tim so lan xuat hien cac tu trong 1 file File2
  30.     char temp[MAXLENGTH];
  31.     bool timthay;
  32.     ifstream FileIn;
  33.     FileIn.open("C:\\Users\\VIET HOANG\\Desktop\\Data2.in", ios_base::in);
  34.     while (!FileIn.eof())
  35.     {
  36.         timthay = false;
  37.         FileIn >> temp;
  38.         for (int i = 0; i < sophantu; i++)
  39.         {
  40.             if (strcmp(danhsach[i].noidung, temp) == 0)//copy temp sang mot mang
  41.             {
  42.                 danhsach[i].dem++;
  43.                 timthay = true;
  44.                 break;
  45.             }
  46.         }
  47.         if (!timthay)
  48.         {
  49.             strcpy(danhsach[sophantu].noidung, temp);
  50.             danhsach[sophantu].dem = 1;
  51.             sophantu++;
  52.         }
  53.     }
  54.     FileIn.close();
Code chi tiết:Tải về

2 nhận xét: