30/09/2018, 16:54
C/C++ - Nhập và kiểm tra dãy số nếu trùng thì yêu cầu nhập lại
Mọi người giúp mình giải bài này với…
Đề bài nguyên văn là:
Nhập một dãy số có n phần tử trong đó không cho phép nhập các số trùng nhau. Nếu nhập một số đã có thì yêu cầu nhập lại. Sau khi đủ n phần tử thì in dãy số đã nhập ra màn hình.
Ý tưởng của e là viết hàm kiểm tra sự tồn tại:
int find_index(int a[], int num_elements, int value){
int i;
for (i=0; i<num_elements; i++){
if (a[i] == value){
return(value);
}
}
return(-1);
}
Sau đó dùng vòng lặp để nhập…
Nhưng ý tưởng là vậy nhưng lên code rắc rối quá, mọi người hướng dẫn e hướng làm với, cám ơn ạ !
Bài liên quan
cái này cũng đơn giản thôi bạn chắc do bạn mới học lập trình nên tư duy chưa được vững lắm, mình đề xuất giải pháp theo ý tưởng của bạn luôn
hướng dẫn sử dụng chức năng debug
find_index thì sẽ trả về có 0 hoặc 1, vì nó kiểm tra mà
cứ tách từng phần nhỏ ra thành từng hàm, xác định từng hàm sẽ gồm những input gì, sẽ return về gì.
mạnh dạn code nhé bạn
E cám ơn nha
Đọc code của a xong thấy dễ quá mà tại sao lại ko nghĩ ra đc
E kiểm tra luôn điều kiện cho a[i], nhưng ko lùi lại 1 giá trị để yêu cầu nhập lại :’(
Cho em Hỏi chút. Tại sao em cho return false vào trong vòng lặp for thì nó k chạy đến a[n-1] vậy!
Bạn nói rõ hơn được không @Hoan_So
Em muốn hỏi là chỗ bool là nếu em đặt else return false trong vòng lặp for thì nó k xét tới a[n-1]
khi chúng ta return lập tức sẽ có giá trị được trả về và hàm dừng ngay, không phải tới a[n-1] đâu em, mà bất kì đâu nó cũng thoát ra hết
#include
using namespace std;
bool find_index(int a[], int num_elements, int value)
{
int i;
for(int i = 0; i < num_elements; i++)
{
if(a[i] == value)
{
return true;
}
else return false;
}
}
ý em là thế. Nếu như a nói thì làm gì đúng điều kiện của dòng if để nó chạy được return true để mà thoát ra được. Nếu em cho return flase vào trong như thế ví dụ n=3 thì nó chỉ xét đến a[n-2] thôi chứ k xét đến a[n-1] nên a[n-2] và a[n-1] trùng nhau nó k bắt nhập lại.
Như vậy độ phức tạp của thật toán quá cao, em muốn làm giảm độ phức tạp của thuật toán đi thì có cách nào không ạ…
Dùng cấu trúc dữ liệu: set, map. Độ phức tạp để kiểm tra xem 1 phần tử có nằm trong dãy không là O(log n), tổng độ phức tạp là O(n log n) và độ phức tạp không gian thêm O(n) nữa.
unordered_map
O(1) tức là hash đó mà.