Cái đề đúng ra nên post ngay đầu bài rồi mới tới code
Lỗi logic tìm số tự mãn có 2 chữ số
bạn cho mình hỏi sự khác nhau giữa return 0 vs return 1. Mình có kiến thức căn bản dừng lại ở Pascal (Xưa đi thi đạt giải cao lắm đó ) giờ qua c++ học cứ tg nó cx na ná Pascal nên cứ code bthg thui.
P/s: tui ms lớp 11, nên đừng gọi anh kỳ lắm.
return 1
trả về giá trị 1 và return 0
trả về giá trị 0. Cái này thì có lẽ là bạn biết rồi nên mình chỉ giải thích cho vui thôi.
Có lẽ là bạn nghĩ sai ở đây đúng không ạ.
Do bạn có check kt(i) == 1
và hàm trả về kiểu int
nên chỗ này return 0
hay return 1
không quan trọng
Bạn đã thử kiểm tra như mình bảo chưa ạ.
2004 chào 2004 .
1 (khác 0) là true
còn 0 là false
thực ra thì mình chỉ thay 1 thành 0 thui. bởi vì cx thử in từ trc khi hỏi bạn r cơ, lúc nãy tui thử thay return 1(nó in ra STM cùng vs 10,1000,100) thành return 0 thì nó ms ko in ra 10,1000,100 gì đó. Chứ tui chịu, bạn chỉ thẳng lỗi luôn dc ko
if (s == b) {
return 1;
};
Giá trị bạn return
trong lệnh này thực ra không quan trọng. Bạn hoàn toàn có thể để 1 ở đó hoặc đổi thành 0. Tuy nhiên return <giá trị bạn thích>
ở đây chỉ return khi thỏa mãn điều kiện. Nếu không thỏa mã điều kiện mà tự thoát hàm bạn có chắc được giá trị nó trả về là gì không? Bạn có thể thử bằng cách in ra là biết.
Cách giải quyết thì thêm return 0
vào cuối hàm như này và vẫn check kt(i) == 1
:
if (s == b) {
return 1;
};
return 0;
Thực ra thì không chỉ giá trị là 10. Nếu bạn thay giá trị i = 10
ở vòng for thành 1 giá trị khác thì giá trị đó trong hầu hết các cases sẽ hiện là số tự mãn.
thanks
Thật ra vấn đề là nằm ở chỗ đặt tên hàm, ngay việc tên hàm mà không có ý nghĩa gì thì khác nào hàm đó vô dụng.
Sửa int dem(int a)
thành [unsigned] int so_chu_so(int a)
, int kt(int a)
thành bool la_so_tu_man(int a)
rồi return 0, 1 thành true
, false
…
Lúc viết thì tự khắc phải biết nên return true
, return false
trong trường hợp nào.
Còn lúc sử dụng thì cũng chỉ cần gọi if (la_so_tu_man(a))
thì cũng đủ hiểu đoạn lệnh đó nó làm cái gì.
Vậy bần đạo cũng lại mạo muộn xin hỏi đạo hữu ktra
là ktra cái gì.
Kiểm tra số đó là số tự mãn? Kiểm tra số đó không là số tự mãn? Vậy thì sẽ return cái gì khi đúng và khi sai?
Rồi đếm cũng là đếm cái gì? Đếm số ước, đếm số chẵn nhỏ hơn a
? Đếm có bao nhiêu số Catalan nhỏ hơn a
?
Vậy bần đạo cũng xin đáp lễ với đạo hữu đây một câu.
Thiên lý chi hành, thủy vu túc hạ
Đạo hữu cao thâm, code pháp khôn lường bần đạo cũng chỉ nói đến nhiêu đó thôi, có chút tài mọn chứ nào dám bêu xấu, nêu danh thành tích như vị đạo hữu đây.
kt là viết tắt của ktra, dem ko cần nói nó là hàm đếm. Tui thừa bt cách đặt tên ko cần phải nhắc( dăm ba cái bài STM ai thèm làm chi cho dài dòng, đặt tên ngắn thôi.)
đếm là đếm cái gì, kiểm tra là kiểm tra gì ?
chả nhẽ mình viết hàm như này rồi đặt tên là kt
nhé
bool kt(int a, int i, bool b) {
return ((a >> i) & 1) ^ !b == 0;
}
với 1 người đã đạt giải 3 cấp tỉnh như sư huynh đây thì chắc là sư huynh đây biết hàm đó là kiểm tra gì mà đúng không
Nói ko phải khoe chứ xưa dc giải 3 tỉnh, còn đứng bao thứ bao nhiêu thì ko bt
thấy bạn cũng tự mãn lắm ra, cái đề này nó hợp với bạn lắm đấy
mình được huy chương bạc Olympic 30/4 còn chưa dám xưng danh giang hồ, còn phải rèn dũa kĩ năng, mà bạn làm thế là bạn lại hơn mình rồi bái phục bái phục
Nhân tiện mình xin tặng bạn câu này:
Never measure the height of a mountain, until you have reached the top. Then you will see how low it was.
Mấy huynh ạ, đệ ko bt, đệ lỡ lời chỉ có ý đùa cợt ai dè mấy huynh nghiêm túc quá, chứ đệ đây cx đi thi nên cx bt chút đỉnh về cái trình độ code của bản thân, vẫn chưa bơi ra biển lớn dc. Cái hàm kt() vì chỉ yêu cầu tìm số tự mãn, đệ chỉ ghi trong ctrinh đó thôi, chứ đệ cx bt là đặt tên phải thể hiện chức năng. Lý do đệ đùa mấy huynh là đệ thấymắc cười quá: chỉ là một ctrinh để thực nghiệm thui, mà vị huynh đài đây làm quá.
Cuối lời, chân thành xin lỗi đến vị huynh đài trên kia..đệ sẽ coi đây là kinh nghiệm để nghiêm túc hơn vs lời nói của mình. Mà vị huynh đài đạt olympic thì em chân thành xin lỗi, cx tự thấy thành tíc của mình trong trg ít ai có nên là cx hơi vui quá chớn chứ e bt cái trình của m thì chỉ hack like fb thôi .mong huynh hạ hoả. Mà chuyên e đậu vào năm lớp 8giờ 11 r ms quay lại nên cao tay hứng, cái máu hacker nó lại nóng trong ng ấy mà.CHÂN THÀNH XIN LỖI
Thôi được rồi, vấn đề được giải quyết thì bạn đánh dấu (giải pháp - solution) cho câu bạn ưng ý.
Mình cũng hiểu ý của bạn, đây là bài tập đơn, nội dung chỉ có 1 nên du di đặt tên tắt.
thôi giúp thì giúp đến cùng, thấy bạn bị assert dominance tội quá
mình đã đọc sơ qua code của bạn thì cũng có vài cái để nói
- nếu bạn đã thi qua các cuộc thi lập trình thì hiển nhiên bạn phải học về chuỗi rồi (có khi chưa) , thì bạn có thể tối giản cái đếm chữ số: chuyển nó về chuỗi rồi lấy chiều dài của nó, tiện vài vòng for, còn làm như nào thì google không tính phí. có khi lại giúp bạn được mấy case số cực lớn
- bạn chưa trả về giá trị khi s != b, và từ đó nó báo lỗi :))) còn cách fix xem tại đây, có gì mark solution cho bạn đấy luôn :)))
Kính chúc sư huynh thành công trên con đường lập trình
tuổi trẻ chưa trải sự đời, lâu r ko đụng tới chứ tui bt là nên ép kiểu r lồi strlen() cho lẹ nhưng mà tui làm quen ấy vs c++ dc mấy hôm nên phải test, huynh đài đây nói chưa học chuỗi trong lòng có chút hơi tự ái, cho hỏi “Khẳng định sự thống trị”, vì trình TA có hạn nên phải sài gg dịch, cx ko hiểu ý lắm, rốt cục là vị huynh đài đây có để bụng ko
vậy thì xin giới thiệu sư huynh đây vài bí thuật: trong C++ có 1 hàm gọi là to_string()
có thể ép kiểu giùm sư huynh và hàm length()
có thể lấy chiều dài chuỗi, điều sư huynh cần nhớ chính là phải #include <string>
mà thôi
và đây là ví dụ
int number = 69420;
string number_but_in_string = to_string(number);
int length = number_but_in_string.length();
sư huynh lại khinh thằng em này rồi , em nói cái đấy ở trên rùi mà (hơi sai hàm tí). Nói chung có gì sai xót mong huynh với huynh kia (ko bt có quen nhau rồi học cụ Huấn ko mà triết lý làm e chả hiểu gì cả).
“For a small child there is no division between playing and learning between the things he or she does just for fun and things that are educational. The child learns while living and any part of living that is enjoyable is also play”.
—Penelope Leach—
từ trước giờ vị tiểu nhân này chưa từng khinh ai cả, ai ai tiểu nhân đều quan tâm, chẳng qua là tiểu nhân thấy kiến thức này sư huynh chưa có, nên vị tiểu nhân này cũng muốn chia sẻ những kiến thức mà tiểu nhân được truyền lại cho sư huynh thôi
đúng là sư huynh sai thật, strlen()
là hàm của C mà :))))
không hiểu sau này hiểu :)))) cái gì cũng cần thời gian
hoặc có khi tự nhiên em lại bất chợt hiểu :)))
anh thủ khoa lớp thầy Huấn đó em
và nếu có gì thắc mắc thì cứ inbox anh, chứ chat ở đây loãng topic :)))