01/10/2018, 00:15

Hỏi về thuật toán trong pascal/c/c++

mấy bác cho em hỏi làm thế nào để tìm tất cả các vị trí của số lớn nhất trong mảng.
VD: 1 5 6 7 7 3 2 7
số lớn nhất là: 7
các vị trí xuất hiện : 4 5 8

Sáng Béo viết 02:25 ngày 01/10/2018

chạy vòng lặp đầu tiên để tìm ra số lớn nhất.
chạy vòng lặp nữa để in ra các vị trí có giá trị bằng số lớn nhất đó.

Lê Thành Long viết 02:21 ngày 01/10/2018

Đầu tiên bạn tạo 1 mảng có thể nhập sẵn
tạo 1 biến 1 biến max (kiểu dữ liệu cùng với mảng)
tạo 1 vòng lặp for để chạy hết cái mảng
gán giá trị đầu tiên của mảng vào biến max
tạo 1 cái if so sánh
nếu giá thứ 2 của mảng > max
max = vi tri so do

Sau đó tiếp tục tạo 1 vòng lặp để tiếp tục tìm vị trí giá trị lớn nhất
if giá trị tại vị trí i == max thì t ghi lại giá trị
chạy đến hết chương trình ta được các vị trí

Quang Minh viết 02:20 ngày 01/10/2018

mình viết bằng C++ đây.

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
	srand(time(0));
	int16_t max, mang[10];
	for (int16_t i=0; i<10; i++)
	{
		mang[i] = rand()%10+1;
		cout<<" "<< mang[i];
	}
	cout<< endl;
	// bat dau tim so lon nhat
	max = mang[0];
	for (int16_t i=1; i<10; i++) if (mang[i] > max) max = mang[i];
	cout<<" SO LON NHAT TRONG DAY : " << max << endl;
	// hien thi vi tri
	cout<<" XUAT HIEN TAI CAC VI TRI : ";
	for (int16_t i=0; i<10; i++) if (mang[i] == max) cout<< i + 1 << " ";
	return(0);
}
Thư Nguyễn viết 02:20 ngày 01/10/2018

hey có lỗi

Nguyễn Xuân Phúc viết 02:20 ngày 01/10/2018

srand nằm trong thư viện stdlib.h (hay cstdlib)

Quang Minh viết 02:31 ngày 01/10/2018

tớ dùng DevC++, chạy ổn

Quang Minh viết 02:22 ngày 01/10/2018

mà cái srand hay rand đấy tớ dùng để khởi tạo mảng số test thôi, xóa đi rồi nhập test bằng tay là được mà

Le Nhat Phong viết 02:17 ngày 01/10/2018

bạn viết giùm mình cái đoạn tìm các vị trí bằng pascal được không, mình viết mãi mà không được

Lê Thành Long viết 02:27 ngày 01/10/2018

bạn viết tương tự như bạn Quang minh ở phía trên ấy

Quân viết 02:24 ngày 01/10/2018

chỉ cần chạy 1 vòng lặp là đủ rồi,
Đầu tiên bạn tạo 1 mảng có thể nhập sẵn
tạo 1 biến 1 biến max (kiểu dữ liệu cùng với mảng) và 1 mảng chứa vị trí max
tạo 1 vòng lặp for để chạy hết cái mảng
gán giá trị đầu tiên của mảng vào biến max
tạo 1 cái if so sánh
nếu giá trị từ vị trí thứ 2 của mảng > max thì max = giá trị tại vị trí đó đồng thời reset mảng chứa vị trí max. add vị trí mới đó vào mảng chứa vị trí max. Nếu giá trị từ vị trí thứ 2 của mảng = max add vị trí đó vào mảng chứa vị trí max

khi xong hết vòng lặp ta được mảng chứa các vị trí bằng với max
mã giả.

func main(){
    var numberList = init number list
    var maxPositionList = List()
    
    var size = numberList.length
    var max = numberList[0]
    maxPositionList.add(0)

    for(i = 1; i < size; i++){
        var numberItem = numberList[i]
        if(max == numberItem){
            maxPositionList.add(i)
        } else if(numberItem > max){
            maxPositionList.clear()
            maxPositionList.add(i)
            max = numberItem
        }
    }

    printLine(max)
    printLine(maxPositionList)
}
Lê Thành Long viết 02:18 ngày 01/10/2018

bạn tạo 1 mảng có thể nhập sẵn
tạo 1 biến 1 biến max (kiểu dữ liệu cùng với mảng) và 1 mảng chứa vị trí max
tạo 1 vòng lặp for để chạy hết cái mảng
gán giá trị đầu tiên của mảng vào biến max
tạo 1 cái if so sánh
nếu giá trị từ vị trí thứ 2 của mảng > max thì max = giá trị tại vị trí đó đồng thời reset mảng chứa vị trí max. add vị trí mới đó vào m

Bạn ơi bạn dùng hàm clear, đó là thư viện có sẵn. còn như pascal hay C thì chủ thớt yêu cầu có lẽ khó à nha

Bài liên quan
0