30/09/2018, 16:53

thuật toán chia để trị

mảng có thứ tự tăng dần, tìm x, nó bị sai kq, e nhập x ngoài giá trị của mảng nó cũng bảo tồn tạo x trong mảng, nhập x thuộc phần tử của mảng nó cũng bảo tồn tại x trong mảng. mà e ko bit nó sai chỗ nào nữa
// chia de tri tim kiem x trong mang.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

bool timx(int a[], int x, int n)
{ 
	int left = 0;
	int right = n - 1;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (x = a[mid])
		{
			return 1;
		}
		else if (x < a[mid])
			right = mid - 1;
		else
			left = mid + 1;
	}
	return -1;
	
}
int _tmain(int argc, _TCHAR* argv[])
{
	int x,mid;
	int a[] = { 1,2,3,4,5,6,7,8 };
	int n = 7;
	cout << "nhap x=";
	cin >> x;
	int k = timx(a, x,n);
	if (k == 1) cout << "ton tai x trong mang!";
	else if(k==-1) cout << "ko ton tai x trong mang!";
	

	return 0;
}
Nguyễn Minh Dũng viết 19:03 ngày 30/09/2018

mảng có thứ tự tăng dần, tìm x, nó bị sai kq ạ

Khi đặt câu hỏi em cố gắng dành nhiều thời gian hơn để đưa giải thích về lỗi sai chứ. Em không nên chỉ bảo là bị sai kq. Dĩ nhiên với các bài dễ thì ổn, nhưng mình không nên cứ như thế hoài. Ví dụ em nên chỉ ra em nhập vào cái gì, em hi vọng sẽ in ra cái gì, nhưng nó in ra cái gì?

Long Long viết 18:57 ngày 30/09/2018

dạ, e xin lỗi, tại e cũng nhát hihi, ko có lần sau đâu a

Minh Hoàng viết 18:54 ngày 30/09/2018
if (x = a[mid]) // so sánh thì phải dùng ==
X viết 19:01 ngày 30/09/2018

hàm bool nên trả về true/false

Nguyễn Minh Dũng viết 18:56 ngày 30/09/2018

Bổ sung thêm video về vụ này nếu @Long_Long chưa hiểu lý do

#include <stdio.h> #include <stdlib.h> int main() { int x = 0; if (x = 1) printf("x = %d\n", x); else (x = 1) printf(" x = %d\n", x); /* else{ printf("kem\n"); }*/ } Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây : Thông tin về khóa học xem tại đây : -Sự khác biệt giữa 2 khóa học cũ và mới : +Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả. +Trong …
Long Long viết 19:08 ngày 30/09/2018

a ns e ms thấy, nhưng sửa rồi vẫn vậy ak a

Nguyễn Minh Dũng viết 18:55 ngày 30/09/2018

Nếu vậy thì là lỗi khác, em nghiên cứu lại code của mình xem. Anh nghĩ có vài lỗi “cơ bản” giống vậy nữa đấy.

Minh Hoàng viết 19:03 ngày 30/09/2018

bạn nên cập nhật tiếp bài viết của bạn theo hướng dẫn của anh Đạt nhé

Trịnh Minh Cường viết 19:02 ngày 30/09/2018

Mình thấy được một chỗ là

if (x = a[mid])

if(x == a[mid])

hy vọng giúp ích…

Long Long viết 19:07 ngày 30/09/2018

zạ, e hiu rồi a ĐẠT, hay quên cái này lắm, e bị mấy lần rồi mà ko rút dc kinh nghiệm

mọi nguoi cho e hỏi, hàm bool nhất quyết phải trả về true vs false ạ. tại e sửa theo a @david15894 thi chay đúng. liệu e muốn nó trả về 1 vs -1 có sai ko

e trả về 1 or 0 cũng đúng, nhưng a vs -1 là sai, ai giải thik cho e khi nào nên trả về giá trị nào đi ạ, e bị đơ phần này

Trịnh Minh Cường viết 19:01 ngày 30/09/2018

Cái đó hình như là tùy vào bạn quy định thôi thường thì thế này nếu tìm thấy giá trị đó thì bạn sẽ trả về 1, không tìm thấy thì trả về 0

Minh Hoàng viết 19:03 ngày 30/09/2018

đơn giản là vì -1 không có nghĩa gì cả. Thư viện của c++ định nghĩa sẵn TRUE là 1, FALSE là 0 (giống define ấy)
còn c thì phải khai báo thư viện mới dùng key TRUE FALSE được.
Cơ mà bài tìm kiếm nhị phân này thì nên trả về là kiểu int là vị trí của x luôn (return -1 nếu không tìm thấy)

X viết 19:02 ngày 30/09/2018

mới học thì nên code cẩn thận, nên dùng “{ }” (bracket) đầy đủ nhé.

Long Long viết 19:00 ngày 30/09/2018

để e nghiên cứu, bài gốc của nó là tìm x trong mảng, trong đó mảng chia làm hai phần, n1 lẽ tăng dần, n2 chẵn giảm dần, vì e học qua qua nên ko hiu về mấy thuật toán này, nên mới phải làm bài chia để trị này lấy ấy tưởng để code bài gốc nữa. hihi

nhatlonggunz viết 19:04 ngày 30/09/2018

Theo như em thấy thì đây là Binary Search bình thường chứ đâu phải chia để trị đâu nhỉ ?

Bài liên quan
0