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;
}