1. Trang chủ
  2. » Thể loại khác

mot so bai tap C ppt

41 463 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Một số bài tập C ppt
Trường học Đại học Thái Nguyên
Chuyên ngành Lập trình C/C++
Thể loại Bài tập
Thành phố Thái Nguyên
Định dạng
Số trang 41
Dung lượng 234,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Phân tích:Ta đã có hàm nhập n phần tử số nguyên ở trên roài.. sau khi nhập xong số lượng n, và n phần tử số nguyên cho mảng ta sẽ duyệt qua mọi phần tử của mảng: trong mỗi lần duyệt, nếu

Trang 1

Sưu tầm bởi boy_dt3; nguồn trathai.vn

int num, tram, chuc, donvi, count = 0;

for (num = 100; num < 1000; num++)

bài 3(3/500)các bài toán cơ bản

/* Bai tap - Bai toan Ancarokhi */

#include <stdio.h>

void main()

{

int dai, rong;

printf("\nBai toan Ancarokhi : Tim dien tich hinh chu nhat co chieu dai gap hai");

printf("\nchieu rong va dien tich = chu vi");

for (dai = 1; dai < 100; dai ++)

for (rong=1; rong < 100; rong++)

if (dai == 2 * rong && (dai + rong)*2 == dai*rong)

Trang 2

printf("\nDai = %d; Rong = %d", dai, rong);

getch();

}

Đề bài: Viết hàm nhập n phần tử số thực từ bàn phím:

Cách 1: (kiểu kinh điển)

void NhapMang(float a[], int &n){ // n là tham chiếu

cout << "Nhap N = "; //thong bao cho nguoi dung nhap so luong

cout << "Nhap mang" << endl; //thong bao qua trinh nhap bat dau

for (int i = 0; i < n ; i++){ //vong lap duyet tu chi so 0 den n-1

cout << "a[" << i << "] = "; //moi lan: thong bao phan tu sap duoc nhap

i

} //ket thuc vong lap

Cách 2: Sử dụng con trỏ như là biến mảng

void NhapMang(float *a, int &n){

cout << "Nhap N = "; //thong bao cho nguoi dung nhap so luong

cout << "Nhap mang" << endl; //thong bao qua trinh nhap bat dau

for (int i = 0; i < n ; i++){ //vong lap duyet tu chi so 0 den n-1

cout << "a[" << i << "] = "; //moi lan: thong bao phan tu sap duoc nhap

cin >> *(a+i); //nhap gia tri tu ban phim cho phan tu thu i

} //ket thuc vong lap

Ở đây a được hiểu là địa chỉ của đầu mảng, tương đương với a[0]

và (a+i) là địa chỉ của phần tử thứ i trong mảng

Cách 3: Kết hợp 2 kiểu trên

void NhapMang(float *a, int &n){

cout << "Nhap N = "; //thong bao cho nguoi dung nhap so luong

cin >> n; //nhap gia tri cho bien n tu ban phim

cout << "Nhap mang" << endl; //thong bao qua trinh nhap bat dau

for (int i = 0; i < n ; i++){ //vong lap duyet tu chi so 0 den n-1

cout << "a[" << i << "] = "; //moi lan: thong bao phan tu sap duoc nhap

cin >> a[i]; //nhap gia tri tu ban phim cho phan tu thu i

} //ket thuc vong lap

Cách sử dụng: Hàm nhập mảng với 3 cách trên đều có thể được sử dụng vào bài 11 chế với bài giải lần 2

Trang 3

Phân tích:

Ta đã có hàm nhập n phần tử số nguyên ở trên roài.

sau khi nhập xong số lượng n, và n phần tử số nguyên cho mảng

ta sẽ duyệt qua mọi phần tử của mảng:

trong mỗi lần duyệt, nếu gặp phần tử thỏa mãn điều kiện ( là số chẵn (a0), hoặc là số nguyên tố (a1) ) thì

sẽ xử lý phần tử đó theo yêu cầu (liệt kê, đếm hoặc là tính tổng )

Ta có code C++ giải các ý a1, b1, c1 như sau:

Code:

#include <iostream.h> //khai bao thu vien su dung luong nhap xuat

#include <iomanip.h> //thu vien dinh dang nhap xuat

#include <math.h> //thu vien cac ham toan hoc

#include <conio.h> //thu vien cung cap cac ham ve man hinh, ban phim

void NhapMang(int *a, int &n){

cout << "Nhap N = "; //thong bao cho nguoi dung nhap so luong

cout << "Nhap mang" << endl; //thong bao qua trinh nhap bat dau

for (int i = 0; i < n ; i++){ //vong lap duyet tu chi so 0 den n-1

cout << "a[" << i << "] = "; //moi lan: thong bao phan tu sap duoc nhap

cin >> *(a+i); //nhap gia tri tu ban phim cho phan tu thu i

} //ket thuc vong lap

int kiemtra_snt(int x){ // tra ve 1 neu x la snt, nguoc lai tra ve 0

for(int i=2; i<=sqrt(x); i++)

if(x%i==0)return 0; //x chia het cho i => x khong phai la snt

return 1;

}

void lietke_snt(int a[], int n){ //ham in ra cac so nguyen to

for(int i=0; i < n; i++)

if(kiemtra_snt(a[i])) cout<<a[i]<<" ";

cout<<endl;

}

int dem_snt(int a[], int n){ //ham tra ve so luong so nguyen to

int c=0; //khai bao bien c dung de dem snt

for(int i=0; i < n; i++)

if(kiemtra_snt(a[i])) c++; //tang bien dem len 1

return c; //tra ve so luong snt dem duoc

}

int tong_snt(int a[], int n){ //ham tra ve so luong so nguyen to

int t=0; //khai bao bien t dung de tinh tong

for(int i=0; i < n; i++)

if(kiemtra_snt(a[i])) t += a[i]; //cong luy tien vao bien t

return t; //tra ve tong cac so nguyen to

}

void main(void)

{

cout<<"Liet ke snt: ";

lietke_snt(a,n);

cout<<"so luong snt: "<<dem_snt(a,n)<<endl;

cout<<"Tong cac so nguyen to: "<<tong_snt(a,n)<<endl;

Trang 4

getch(); //cho nguoi dung an phim bat ky de thoat

}

Còn các ý a0, b0, c0 quả thực rất đơn giản, ta chỉ việc thay hàm kiemtra là sẽ cho kết quả như ý muốn!

Đề bài: Nhập n phần tử số nguyên, in ra màn hình giá trị nhỏ nhất và lớn nhất trong mảng Phân tích: Bài này có nhiều cách giải

Cách 1 (đơn giản nhất):

+đầu tiên yêu cầu người dùng nhập số lượng phần tử là n

+lặp n lần, mỗi lần nhập 1 giá trị, vừa nhập xong là so sánh với biến min và max, nếu giá trị vừa nhập bé hơn min thì min sẽ bằng số vừa nhập, và nếu số đó lớn hơn biến max thì max sẽ bằng số đó

Cách 2: dùng mảng (kinh điển)

+ nhập mảng n phần tử số nguyên từ bàn phím (đã có thuật toán và code ở trên)

+ gán tạm thời min và max bằng phần tử đầu tiên

+ duyệt qua toàn mảng: nếu giá trị đang duyệt bé hơn min hoặc lớn hơn max thì cập nhật lại min và max

Cách 3: dài dòng nhất

+ nhập mảng n phần tử số nguyên từ bàn phím (đã có thuật toán và code ở trên)

+ sắp xếp tăng dần (hoặc giảm dần)

+ nếu sắp xếp tăng dần thì min sẽ là phần tử đâu tiên, và max sẽ là phần tử cuối cùng trong mảng đã sắp xếp.

Đề bài: Nhập n phần tử số nguyên, in ra màn hình giá trị nhỏ nhất và lớn nhất trong mảng Cách 1 (đơn giản nhất):

+đầu tiên yêu cầu người dùng nhập số lượng phần tử là n

+lặp n lần, mỗi lần nhập 1 giá trị, vừa nhập xong là so sánh với biến min và max, nếu giá trị vừa nhập bé hơn min thì min sẽ bằng số vừa nhập, và nếu số đó lớn hơn biến max thì max sẽ bằng số đó

#include <iostream.h>

void main(){

int x, i, n, min, max;

cout << "Nhap so luong n = "; cin >> n; //nhap so luong

if ( n > 0 ) { //so luong > 0

cout<<" Gia tri phan tu thu dau tien = "; cin >> x; //nhap a[0]

min = max = x; //min=max=a[0]

for ( i = 2 ; i<=n; i++ ){ //vong lap i=2->n

cout<<" Gia tri phan tu thu "<<i<<" = "; cin >> x; //nhap a[i]

if ( x < min ) min = x; //cap nhat min

if ( x > max ) max = x; //cap nhat max

}

cout << "Gia tri lon nhat = " << max << endl; //in ket qua

cout << "Gia tri nho nhat = " << min << endl;

}

}

Đề bài: Nhập n phần tử số nguyên, in ra màn hình giá trị nhỏ nhất và lớn nhất trong mảng Cách giải 2: dùng mảng (kinh điển)

+ nhập mảng n phần tử số nguyên từ bàn phím (đã có thuật toán và code ở trên)

+ gán tạm thời min và max bằng phần tử đầu tiên

+ duyệt qua toàn mảng: nếu giá trị đang duyệt bé hơn min hoặc lớn hơn max thì cập nhật lại min và max

#include <iostream.h>

void NhapMang(int *a, int &n){

cout << "Nhap N = "; cin >> n;

cout << "Nhap mang" << endl;

for (int i = 0; i < n ; i++){

cout << "a[" << i << "] = ";

cin >> *(a+i);

}

}

Trang 5

void TimMinMax(int a[], int n, int &min, int &max){

min = max = a[0];

for (int i = 1; i < n ; i++){

if ( a[i] < min ) min = a[i];

if ( a[i] > max ) max = a[i];

TimMinMax (a, n, min, max);

cout << "Gia tri lon nhat = " << max << endl;

cout << "Gia tri nho nhat = " << min << endl;

}

Chú ý: biến min và max trong đối số hàm TimMminMax là tham chiếu nhé

void TimMinMax(int a[], int n, int &min, int &max)

trên hàm tìm min và max dùng cách kinh điển,

ta có thể thay đổi bằng cách dùng con trỏ như sau:

void TimMinMax(int *a, int n, int &min, int &max){

min = max = *a;

for (int i = 1, *p=++a; i < n ; i++, p++){

if ( *p < min ) min = *p;

if ( *p > max ) max = *p;

}

}

chú ý a tương đương với con trỏ trỏ vào đầu mảng nên *a tương đương với a[0]

ban đầu p trỏ vào phần tử a[1] (khối khởi tạo con trỏ *p=++a, tức là p trỏ tới a[1] )

trong mỗi vòng lặp p trỏ vào a[i], và cập nhật min và max nếu a[i] < min hoặc a[i] > max

sau đó p trỏ đến phần tử tiếp theo (lệnh p++ )

(biến i ở đây đảm bảo duyệt sẽ duyệt từ a[1] đến a[n-1] : duyệt hết)

Có ai ko hiểu cách làm việc của hàm tìm min max thứ 2 này không?

Đề bài: Nhập n phần tử số nguyên, in ra màn hình giá trị nhỏ nhất và lớn nhất trong mảng Cách giải 3: dài dòng nhất

+ nhập mảng n phần tử số nguyên từ bàn phím (đã có thuật toán và code ở trên)

+ sắp xếp tăng dần (hoặc giảm dần)

+ nếu sắp xếp tăng dần thì min sẽ là phần tử đâu tiên, và max sẽ là phần tử cuối cùng trong mảng đã sắp xếp.

#include <iostream.h>

void NhapMang(int *a, int &n){

cout << "Nhap N = "; cin >> n;

cout << "Nhap mang" << endl;

for (int i = 0; i < n ; i++){

cout << "a[" << i << "] = ";

cin >> *(a+i);

}

}

void SapXep(int a[], int n) { //sắp xếp tăng dần

for (int i = 0; i < n - 1; i++)

Trang 6

void main(){

int a[100], n;

NhapMang (a, n);

SapXep (a, n);

cout << "Gia tri nho nhat = " << a[0] << endl;

cout << "Gia tri lon nhat = " << a[n-1] << endl;

}

Đề bài: Nhập n phần tử số nguyên Nhập phần tử cần tìm kiếm X Nếu trong n phần tử đã nhập có

X thì báo "tìm thấy", số lần tìm thấy và "các vị trí tìm thấy", ngược lại báo "không tìm thấy"

nếu đếm thấy có: tiến hành liệt kê các vị trí

ngược lại thì thông báo không có

Đơn giản vậy thôi

ta sẽ chia các công việc ra từng hàm riêng

hàm nhập kinh điển

hàm đếm trả về số lượng phần tử có giá trị bằng giá trị cho trước

hàm liệt kê: tươg tự hàm trên, mỗi khi gặp a[i] bằng x thì in vị trí ra (vị trí là i)

Code C++ đây thực hành nào:

#include <iostream.h>

void NhapMang(int a[], int &n){

cout << "Nhap so luong phan tu cua mang: "; cin >> n;

for (int i = 0; i < n ; i++){

cout << "a[" << i << "] = "; cin >> a[i];

void LietKe(int a[], int n, int x) {

for (int i = 0; i < n; i++) if (a[i] == x) cout << i << " ";

Trang 7

#include <iostream.h>

void NhapMang(int a[], int &n){

cout << "Nhap N = "; cin >> n;

for (int i = 0; i < n ; i++){

cout << "a[" << i << "] = "; cin >> a[i];

}

}

int TimKiem(int a[], int n, int x) {

for (int i=0; i < n; i++) if(a[i]==x) return 1;

cout << "Gia tri tim kiem = "; cin >> x;

if( TimKiem (a, n, x) ){

Tính ước số chung lớn nhất của 91 và 287.

Trước hết lấy 287 (số lớn hơn trong 2 số) chia cho 91:

287 = 91*3 + 14 (91 & 14 sẽ được dùng cho vòng lặp kế)

Nhận xét: bất kỳ số nào chia hết bởi 287 và 91 cũng sẽ chia hết bởi 287 - 91*3 = 14 Tương tự, số chia hết bởi 91 và 14 cũng chia hết bởi 91*3 + 14 = 287 Do đó, ƯSCLN(91,287) = ƯSCLN(91,14) Bài toán trở thành tìm ƯSCLN(91,14) Lặp lại quy trình trên cho đến khi phép chia không còn số dư như sau:

91 = 14*6 + 7 (14 & 7 sẽ được dùng cho vòng lặp kế)

14 = 7*2 (không còn số dư, kết thúc, nhận 7 làm kết quả)

Cuối cùng ta có: 7 = ƯSCLN(14,7) = ƯSCLN(91,14) = ƯSCLN(287,91).

#include <iostream.h>

#include <math.h>

int main()

Trang 8

int a,b;

cout<<"Nhap a,b"; cin>>a>>b;

int x= abs(a), y= abs(b), r;

cout<<"Nhap a,b"; cin>>a>>b;

int x= abs(a), y= abs(b), r;

bài toán hay! (của lớp 3)

Tìm số tự nhiên N có chữ số hàng đơn vị là d, biết khi chuyển chữ số hàng đơn vị lên đầu thì được

số mới có giá trị lớn gấp k lần N.

Lập trình tìm N với d và k nhập từ bàn phím

ta vd N là: là abcd, thì abcd x k = dabc

giả sử biết d=9 và k=2, ta suy ra được c=8, từ c=8 suy ra được b=7, từ b suy ra được a=5

cứ như thế ta sẽ tim được số N

#include <iostream.h>

void main(){

Trang 9

int a[100], d,k,i,j;

Bài này có nhiều cách giải, sau đây là 1 cách:

+khai báo mảng, khai báo biến số lương n, khai báo biến m

+Nhập mảng: nhập n, nhập n phần tử

+nhập m

+sắp xếp toàn bộ mảng theo thứ tự tăng dần

+tìm k là vị trí phần tử bé nhất trong mảng đã sắp xếp nhưng lớn hơn m

+từ k đến cuối mảng: sắp xếp giảm dần (có thể dùng thuật toán soi gương ở đây)

+in mảng ra màn hình sẽ được kết quả mong muốn.

#include <iostream.h>

void NhapMang(int *a, int &n){

cout << "Nhap N = "; cin >> n;

for (int i = 0; i < n ; i++){

Trang 10

}

}

void liet_ke(int a[], int n){

for(int i=0; i<n; i++)

phần trước có bài bài tập gptb2 với hệ số a, b, c bất kỳ, đã post 2 bài là gptb1 và gptb2 riêng biệt, nhưng

k thấy có bạn nào ghép nó lại cả

cout<<"pt co 2 nghiem thuc"<<endl

<<"nghiem thuc 1="<<x1<<endl

<<"nghiem thuc 2="<<x2<<endl;

}

else{

cout<<"pt k co nghiem thuc\n";

cout<<"pt co 2 nghiem phuc lien hop"<<endl;

Trang 11

gptb1(b,c);

}

Bài toán: Tìm tất cả các số tự nhiên "hoàn hảo" từ 1 đến n n nhập từ bàn phím số "hoàn hảo" là

số có giá trị bằng tổng các ước số của nó

ví dụ: số 6 = 3 + 2 + 1

Phân tích: lợi dụng sức trâu bò của máy: ta thử mọi số trong phạm vi từ 1 -> n Nếu số nào thỏa tính chất

thì in nó ra

Ở đây việc chính là phải kiểm tra được tính "hoàn hảo" của số nguyên

vậy ta phải viết hàm kiểm tra đó, khi đó công việc liệt kê sẽ đơn giản.

if ( x % i == 0 ) //x chia hết cho i, thì i là ước số của x

t += i; //tăng biến chứa tổng

return t == x; //so sánh: nếu tổng bằng x thì x là số hoàn hảo }

void main(){

int n;

cout << "Nhap n = "; cin >> n;

cout << "Cac so tu nhien hoan hao: ";

for ( int i = 1; i <= n; i ++ )

if ( kiem_tra ( i ) )

cout << i << " ";

}

giờ viết cái hàm tìm kiếm nhị phân

với đầu vào là mảng đã sắp xếp tăng dần, nếu thấy trả về vị trí tìm thấy, nếu không tìm thấy thì trả về 0 Phân tích: với đầu vào là mảng đã sắp xếp tăng dần, khi bắt đầu tìm kiếm ta truyền vào left là chỉ số đầu tiên ( thường là 0) và right là chỉ số của phần tử cuối cùng (có n phần tử, chỉ số của phần tử đầu là

0 thì chỉ số của phần tử cuối cùng là n-1 )

nếu giá trị x cần tìm lớn hơn giá trị giữa left và right ( m = (l+r)/2 )thì có nghĩa x ở bên phía phải, khi

đó thay biên trái (left) bằng giá trị giữa cộng 1 ( l = m + 1 )

ngược lại x ở bên trái, khi đó cập nhật biên phải

cho đến khi biên trái = biên phải thì dừng

kiểm tra lại x có bằng a[l] không? , nếu bằng thì trả về vị trí, ngược lại trả về 0

Trang 12

Bài 6 Viết một chương trình nhập vào từ bàn phím điểm kiểm tra của một môn học của n học sinh và in kết

quả ra màn hình dưới dạng hai cột song song, một cột là điểm và cột thứ hai là xếp loại theo điểm với các qui định sau:

Trang 13

#include <iostream.h>

void NhapMang(int *a, int &n){

cout << "Nhap N = "; cin >> n;

for (int i = 0; i < n ; i++){

cout << "a[" << i << "] = ";

cin >> a[i];

}

}

void SapXep_TangDan(int a[], int n){

for(int i=0; i<n-1; i++)

int KiemTra_TangDan (int a[], int n){

for( int i = 0; i < n - 1; i ++ ) if ( a[i] > a[i+1] ) return 0; return 1;

Trang 14

Chú ý là bài trên chưa có tìm số lượng.

và cũng chưa làm được "Sau khi tìm xong, hỏi có tìm nữa khôg? nếu tìm nữa thì lại nhập m, rồi tìm y chang như trên cứ thế cho đến khi trả lời là không muốn tìm nữa thì thôi"

Giải quyết bài toán kiểu "Sau khi tìm xong, hỏi có tìm nữa khôg? nếu tìm nữa thì lại nhập m, rồi tìm y chang như trên cứ thế cho đến khi trả lời là không muốn tìm nữa thì thôi"

cụ thể cho bài trên

cout << "Mang sap xep tang dan:";

for(i = 0; i < n; i++) cout << a[i] << " ";

cout << " Khong co phan tu " << x << " trong day " << endl;

cout<<"Tim tiep khong? (c/k)"; cin>>c;

}while(c=='c'||c=='C');

}

Vậy cách chung để giải quyết là:

khai báo 1 biến kiểu ký tự để chứa trả lời

đặt công việc cần làm trong vòng lặp kiểm tra sau do - while

khi làm xong công việc thì hỏi lại người dùng có muốn chạy lại không? (c/k)

Giải quyết công việc tìm số lượng của mỗi lần tìm kiếm nhị phân trong bài trên:

Phân tích: Ta có thể viết hàm tìm kiếm nhị phân như là 1 thủ tục như sau để có thể đếm luôn được số

lượng.

vì mảng đã sắp xếp tăng dần, nên khi tìm đc 1 phần tử bằng giá trị tìm kiếm, thì chỉ cần kiểm tra các phần

tử ngay sau nó, có bao nhiêu phần tử bằng giá trị tìm kiếm thì đó là số lượng cần tìm

Trang 15

void NhapMang(int *a, int &n){

cout << "Nhap N = "; cin >> n;

for (int i = 0; i < n ; i++){

cout << "a[" << i << "] = ";

cin >> a[i];

}

}

void SapXep_TangDan(int a[], int n){

for(int i=0; i<n-1; i++)

int KiemTra_TangDan (int a[], int n){

for( int i = 0; i < n - 1; i ++ ) if ( a[i] > a[i+1] ) return 0;

return 1;

}

void main(){

int a[100], n;

Trang 16

NhapMang(a, n);

if(! KiemTra_TangDan(a, n)) SapXep_TangDan(a, n);

int m, i, k;

cout << "Mang sap xep tang dan:";

for(i = 0; i < n; i++) cout << a[i] << " ";

giá trị 4 xuất hiện 3 lần

giá trị 6 xuất hiện 3 lần.

sau khi khai báo mảng rồi nhập mảng

ta dùng 1 mảng đếm, lưu số lần xuất hiện của từng phần tử

tức là d[i] = đếm số lần xuấthiện a[i] trong mảng a

sau đó tìm max trong mảng đếm

tức là max = MAX { d[i] }

giả sử max = d[k] thì giá trị xuất hiện max lần chính là a[k]

các bạn chú ý code sao cho không để tình trạng báo trùng kết quả nhé

đừng để với trường hợp

ví dụ 2:

có 12 phần tử: 1 2 3 3 3 2 2 3 3 4 4 5

lại thông báo 5 lần đều là

giá trị 3 xuất hiện 5 lần

giá trị 3 xuất hiện 5 lần

giá trị 3 xuất hiện 5 lần

giá trị 3 xuất hiện 5 lần

giá trị 3 xuất hiện 5 lần

Nhập mảng n phần tử số nguyên, tìm giá trị phần tử xuất hiện nhiều nhất trong mảng, nếu có nhiều giá trị khác nhau cùng xuất hiện nhiều nhất thì liệt kê hết các giá trị đó ra.

ví dụ 1:

có 11 phần tử: 1 4 4 2 2 4 5 6 3 6 6

thì thông báo

giá trị 4 xuất hiện 3 lần

giá trị 6 xuất hiện 3 lần.

ví dụ 2:

Trang 17

có 12 phần tử: 1 2 3 3 3 2 2 3 3 4 4 5

thì thông báo

giá trị 3 xuất hiện 5 lần

Phân tích cách 2

sau khi có mảng n phần tử số nguyên

ta sắp xếp tăng dần(hoặc giảm dần cũng OK) mảng đó

khi đó cũng dùng mảng đếm d để lưu số lần xuất hiện của từng phần tử (chỗ này có khác đi 1 tí để dễ dàng

việc loại bỏ giá trị lặp hơn

bằng cách duyệt từ đầu đến hết mảng đã sắp xếp

mỗi khi gặp giá trị trùng (trùng thì đứng cạnh nhau do đã sắp xếp) thì tăng số biến đếm thôi

d[0]=1;

for( i = 1; i < n; i++ ) d[i] = ( a[i]=a[i-1] ) ? d[i-1]+1 : 1 ;

khi đó tìm max = giá trị max trong mảng d

rồi liệt kê lại các giá trị a[k] tương ứng với d[k] có giá trị bằng max

Nhập mảng n phần tử số nguyên, tìm giá trị phần tử xuất hiện nhiều nhất trong mảng, nếu có nhiều giá trị khác nhau cùng xuất hiện nhiều nhất thì liệt kê hết các giá trị đó ra.

ví dụ 1:

có 11 phần tử: 1 4 4 2 2 4 5 6 3 6 6

thì thông báo

giá trị 4 xuất hiện 3 lần

giá trị 6 xuất hiện 3 lần.

sau khi có mảng n phần tử số nguyên

ta sắp xếp tăng dần (hoặc giảm dần cũng OK) mảng đó

khi đó cũng dùng mảng đếm d để lưu số lần xuất hiện của từng phần tử (chỗ này có khác đi 1 tí

để dễ dàng việc loại bỏ giá trị lặp hơn

bằng cách duyệt từ đầu đến hết mảng đã sắp xếp

mỗi khi gặp giá trị trùng (trùng thì đứng cạnh nhau do đã sắp xếp) thì tăng số biến đếm thôi d[0]=1;

for( i = 1; i < n; i++ ) d[i] = ( a[i]==a[i-1] ) ? d[i-1]+1 : 1 ;

khi đó tìm max = giá trị max trong mảng d

rồi liệt kê lại các giá trị a[k] tương ứng với d[k] có giá trị bằng max

#include <iostream.h>

void NhapMang(int *a, int &n){

cout << "Nhap N = "; cin >> n;

void SapXep_TangDan(int a[], int n){

for(int i=0; i<n-1; i++)

for(int j = i + 1; j < n; j ++)

if(a[i] > a[j]){

Trang 18

int a,b; //hai toan hang a,b

char ch;//dau cua phep toan

Trang 19

cout<<"Khong thuc hien phep chia";

Ngày đăng: 20/03/2014, 19:20

TỪ KHÓA LIÊN QUAN

w