Đề bài
Ý tưởng thuật toán
Tổng quan
Hiểu đơn giản là: Chúng ta có một dãy số (n số), kiểm tra 1 số bất kỳ trong dãy số (số x), xem số x xuất hiện hay không và có thì xuất hiện mấy lần trong dãy.
Dưới đây là các bước thực hiện theo đầu bài, bạn phải hiểu và sắp xếp các bước sao cho phù hợp:
Nhập n phần tử nguyên
Đây cũng là kích thước của mảng gồm n phần tử.
Nhập phần tử cần tìm kiếm x
Bạn sẽ nhập 1 số bất kỳ để máy tính sẽ check trong dãy số bạn vừa nhập xem có số nào giống không, và nó xuất hiện bao nhiêu lần.
Nhập giá trị các phần tử
Có 2 cách để viết:
Cách 1
void nhap(int a[], int n, char *name) { for (int i=0;i<n;i++) { cout<<name<<"["<<i<<"]= "; cin>>a[i]; } }
Các bạn có thể thấy char *name hơi lạ 1 chút so với các bài hàm trước đây.
Thực ra nó có kiểu viết char *name và char* name.
Dấu hoa thị là toán tử dereferences. Nó áp dụng cho biểu tượng theo sau nó, bất kể số lượng khoảng cách giữa chúng. Do đó, ” char *name ” và ” char* name ” là cùng một biểu thức.
Tuy nhiên, ” char* name ” có nghĩa là không có gì. Toán tử hội nghị áp dụng cho biểu tượng theo sau: ” char *name ” là chính xác. Nó thực sự có nghĩa là: “(* name) là một char” hoặc “khi dereferenced, cũng là một char”.
name sẽ được đặt tên khi chúng ta gọi hàm nhap ở trong hàm main và đặt tên tùy ý.
Cách 2 này chúng ta gặp nhiều hơn nè
void nhap(int a[], int n) { for (int i=0;i<n;i++) { cout<<"A["<<i<<"]= "; cin>>a[i]; } }
Kiểm tra xem X có trùng số nào trong dãy không
for (int i=0;i<n;i++) if (a[i]==x) { cout<<endl<<i<<": "<<a[i]<<" "; d++; }
i=0 vì phần tử đầu tiên của mảng là 0. Ví dụ: a[0]=… a[1]=… … a[n].
Kiểm tra phần tử thứ i nếu =x “… if (a[i]==x) …” thì hiển thị vị trí thứ i “… <<i …” và giá trị tại vị trí i đó.
Tiếp theo d++ là chúng ta đếm xem còn số nào trùng nữa không nếu điều kiện còn thỏa mãn.
Code đầy đủ bài toán
#include <iostream> using namespace std; void nhap(int a[], int n, char *name) { for (int i=0;i<n;i++) { cout<<name<<"["<<i<<"]= "; cin>>a[i]; } } int main() { int a[10],n,x,i,d=0; cout<<"Nhap n: "; cin>>n; cout<<"Nhap x: "; cin>>x; nhap(a,n,"A"); for (int i=0;i<n;i++) if (a[i]==x) { cout<<endl<<i<<": "<<a[i]<<" "; d++; } if (d>0) cout<<"\nTim thay "<<d<<" phan tu"; else cout<<"\nKhong tim thay"; }
Ví dụ, chúng ta nhập dãy số n gồm 4 phần tử: 6 8 9 8
Số x để kiểm tra trong dãy là x= 9.
Trường hợp này, chúng ta thấy số x = 9 xuất hiện 1 lần, thỏa mãn điều kiện if (a[i]==x) và d++ hay d=d+1.
d khởi tạo =0 nên d=0+1 =1. Nó lấy d=1 đem so sánh ở dòng 22 và thấy d>0 nên in ra màn hình Tìm thấy 1 phần tử cout<<“\nTim thay “<<d<<” phan tu”;
Kết quả Khi chạy chương trình
Nhap n: 4
Nhap x: 9
A[0]= 6
A[1]= 8
A[2]= 9
A[3]= 8
2: 9
Tim thay 1 Phan tu