Bài tập C++ có lời giải/Mảng - ký tự - chuỗi

Bài 1: Tìm các số chính phương và nguyên tố trong mảng

  • Dòng 1: Nhập vào N là số lượng phần tử của mảng
  • Dòng 2: Nhập N số nguyên (mỗi số cách 1 khoảng trắng)

VD:

Input
Output
4
1 2 3 4
1 4
2 3
#include <iostream>
#include <math.h>

using namespace std ;

int main() {
    
    int sl , day , T ;
    int K[100] ;
    
    cin >> sl ;
    for (int i = 0 ; i < sl ; i++) {
        cin >> day ;
        K[i] = day ;
    }
    
    // so CP
    for (int i = 0 ; i < sl ; i++) {
        T = sqrt(K[i]) ;
        if (T*T == K[i])
            cout << K[i] ;
    }
    cout << endl ;
    
    // so NT
    for (int i = 0 ; i < sl ; i++) {
        
        bool flag = true ;
        if (K[i] < 2) 
            flag = false ;
        
        for (int j = 2 ; j <= sqrt(K[i]) ; j++) {
            if (K[i] % j == 0) {
                flag = false ;
                break;
            }
        }
        
        if(flag==true) cout << K[i] ;
        
    }
    
    return 0;
}

Bài 2: Tìm các số âm và dương trong mảng

  • Dòng 1: Nhập vào N là số lượng phần tử của mảng
  • Dòng 2: Nhập N số nguyên (mỗi số cách 1 khoảng trắng)
#include <iostream>
using namespace std ;

int main() {
    
    int K[100] , n , d ;
    cin >> n ;
    
    for (int i =0 ; i<n ; i++) {
        cin >> d ;
        K[i] = d ;
    }
    
    for (int i = 0 ; i < n ; i++) {
        if (K[i] < 0)
            cout << K[i] ;
    }
    
    for (int i = 0 ; i < n ; i++) {
        if (K[i] > 0)
            cout << K[i] ;
    }
    
    return 0;
}

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

#include "iostream"
using namespace std;
int main()
{
	int a[100];
	int n = 0;
	int x;
	while (cin >> x) {
		a[n] = x;
		n++;
	}
	int maxval = a[0], minval = a[0];
	for (int i = 1; i < n; i++) {
	if (maxval < a[i])
		maxval = a[i];
	if (minval > a[i])
		minval = a[i];
}
	cout << minval << endl;
	cout << maxval << endl;

	return 0;
}

Bài 4: Tìm đường chéo chính của ma trận vuông NxN

- Dòng 1: Số nguyên N

- Dòng 2: Nhập N dòng, mỗi dòng gồm N số nguyên (cách nhau 1 khoảng trắng)

VD:

Input
Output
3
1 2 3
4 5 6
7 8 9
1 5 9
#include <iostream>

using namespace std;

int main()
{
   float A[10][10];
   int n, a, b;
   cin >> n;
   for (a = 1; a<=n; a++)
   for (b = 1; b<=n; b++) {
       cin >> A[a][b];
   }
   
   for ( a=1; a<=n; a++)
        cout << A[a][a] <<" ";

    return 0;
}

Bài 5: Nhập vào 2 số nguyên N, M là số dòng và số cột của mảng 2 chiều N x M, xuất mảng ziczac (xem ví dụ)

VD:

Input
Output
3 3
1 2 3
6 5 4
7 8 9
#include "iostream"
using namespace std;

int main()
{
	int a[100][100], N, M, t = 1; //N la so dong, M la so cot
	cin >> N >> M;
	for (int i = 0; i < N; i++) {
		if (i % 2 == 0) {
			for (int j = 0; j < M; j++) {
				a[i][j] = t;
				t++;
			}
		}
		else {
			for (int j = M - 1; j >= 0; j--) {
				a[i][j] = t;
				t++;
			}
		}
	}
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) cout << a[i][j] << " ";
		cout << endl;
	}
    return 0;
}

Bài 6: Nhập vào 2 số nguyên N, M là số dòng và số cột của mảng 2 chiều N x M, xuất mảng ziczac (xem ví dụ)

VD:

Input
Output
3 3
1 2 3
8 9 4
7 6 5
#include <iostream>

using namespace std ;

int K[100][100] , n , m ;

void XuLy() {
	  int trai = 0, tren = 0, phai = m, duoi = n, dem = 0, soluong = m*n;
	  
	  while (dem < soluong) {
	      
		for (int i = trai ; i < phai ; i++)	K[trai][i] = ++dem ;
		tren++ ;
		    
		for(int i = tren ; i < duoi ; i++)	K[i][phai-1] = ++dem ;
		phai-- ;
	        
		for (int i = phai-1 ; i >= trai ; i--)	K[duoi-1][i] = ++dem ;
		duoi-- ;
		       
		for (int i = duoi-1 ; i >= tren ; i--)	K[i][trai] = ++dem ;
		trai++ ;
		
	  }
}

void Xuat() {
	for (int i = 0 ; i < n ; i++) {
  		for (int j = 0 ; j < m ; j++)
  		    cout << K[i][j] ;
  		    cout << endl ;
  	}
}

int main() {
 	cin >> n >> m ;
 
 	XuLy();
 	Xuat();
 
 	return 0;
}

Bài 7: Xuất số lượng các ký tự (không tính khoảng cách) trong một chuỗi (dùng khoảng trắng để ngăn cách các ký tự) ra màn hình

VD:

Input
Output
b a n a n a
a : 3
b : 1
n : 2
#include <iostream>
#include <cstring>

using namespace std;

void xuat( int a[] , char str[] ) {

for (int j = 0 ; j < 26 ; j++)
    if (a[j]>0) cout << str[j] << ":" << a[j] << endl;
    }

void dem (char s[]) {

char str[26];

strcpy(str,"abcdefghijklmnopqrstuvxywz");

int a[26] = {0};

for (int j =0 ; j < strlen(s) ; j++) {
    for (int k =0 ; k < 26; k++) {
        if (s[j] == str[k])
    a[k]++;
    }
        }
xuat(a, str);
}
void nhap() { 
char s[100];
cin.getline(s,100);
dem(s); 
}

int main() {
    nhap ();
return 0;
}