Đây là phần thứ ba trong loạt câu đố C / C ++ của tôi; trong trường hợp bạn bỏ lỡ 2 cái đầu tiên thì chúng ở đây: (1) câu đố lập trình của m3ph1st0s 1 (C ++) (2) câu đố lập trình của m3ph1st0s 2 (C ++): "Hãy gọi khó!"
Tôi phải nói rằng câu đố của tôi là 100% nguyên bản. Nếu không, tôi sẽ luôn luôn nêu trong văn bản. Câu đố thứ 3 của tôi có 2 phần như sau:
Câu đố 3.1
Phần này (3.1) không phải là một câu đố gốc của tôi, nó được thu thập từ một số trang internet tôi đã đọc cách đây một thời gian. Tôi sử dụng nó ở đây như một điểm khởi đầu và khởi động cho bạn. Giải quyết phần này và sau đó chuyển sang phần 2.
Một số người đã cố in dấu "+" 20 lần và đưa ra chương trình sau:
#include <stdio.h>
int main() {
int i;
int n = 20;
for( i = 0; i < n; i-- )
printf("+");
return 0;
}
Thực tế là nó không có kết quả như mong đợi là hiển nhiên - chương trình không bao giờ kết thúc. Sửa nó! Dễ dàng? Bây giờ hãy sửa chương trình bằng cách thay đổi CHỈ MỘT ĐẶC ĐIỂM - tất nhiên là nhân vật không gian! Đối với thử thách này có 3 giải pháp. Tìm cả 3 người trong số họ. Chỉ cần làm rõ: chương trình phải xuất ra 20 dấu "+" và phải kết thúc nhanh. Trước khi chỉ trích tôi về "nhanh" nghĩa là gì, tôi sẽ nói nó có nghĩa là nhiều nhất là vài giây (bằng cách này là quá nhiều nhưng chỉ để làm cho nó rõ ràng).
Câu đố 3.2
EDITED Tôi đã chỉ ra trước đó rằng giải pháp cho câu đố 3.2.2 có thể phụ thuộc vào trình biên dịch. Để loại bỏ bất kỳ cuộc thảo luận nào có thể có về chủ đề này, tôi sẽ sửa đổi ý tưởng và cải thiện nó trong câu đố tiếp theo khi tôi sẽ cẩn thận hơn để không gây tranh cãi. Tuy nhiên, để tiếp tục giải câu đố này, tôi sẽ thực hiện một sửa đổi nhỏ cho 3.2.2 (giải pháp sẽ dễ dàng hơn nhưng sạch hơn).
Khi tôi lần đầu tiên nhìn thấy câu đố tôi thấy nó khá tuyệt vời. Tôi đã cố gắng giải quyết nó nhưng không phải ngay lập tức vì nó đòi hỏi sự chú ý cẩn thận. Nếu bạn ở đây có nghĩa là bạn quá giải quyết nó. Nếu bạn đã làm như vậy bằng cách viết một chương trình để thay thế tất cả các ký tự có thể bằng tất cả các giá trị có thể và kiểm tra mọi giải pháp, bạn sẽ bị mất. Anh chàng chăm chỉ mặc dù. Bây giờ đã sửa chương trình viết 20 ký hiệu "+":
3.2.1: Chèn một chữ cái duy nhất và không có gì nữa trong mã để kết quả hợp lệ và xuất ra điều tương tự trong cả 3 chương trình đã sửa. Không cần phải nói, bức thư phải có trước bao vây} của chính (tôi nói rằng vì tôi không muốn nghe những người chỉ đặt một lá thư sau chương trình và bằng cách nào đó trình biên dịch của họ rất thân thiện).
EDITED (xem dưới đây) - Đối với những câu hỏi cuối cùng này, hãy xem xét rằng bộ đếm i bắt đầu từ -1 thay vì 0.
3.2.1.5: Lặp lại tất cả các sự cố trước đó với điều kiện đầu ra có ít nhất 19 dấu "+" (nhưng vẫn là đầu ra hữu hạn). Thay đổi không gian được cho phép. Bây giờ bạn có thể đã tìm thấy nhiều giải pháp hơn trong trường hợp đầu tiên. Một số trong số này chắc chắn sẽ phù hợp với câu hỏi 3.2.2.
3.2.2: Chọn một giá trị khác để khởi tạo biến n để đầu ra kết quả sẽ giữ nguyên cho ít nhất một chương trình đã sửa trong 3.2.1.5 (không nhất thiết phải cho tất cả chúng).
LAST EDIT1 : thay đổi chương trình để nó tạo ra các dấu 21 "+" vẫn là một giải pháp tốt, vì văn bản gốc không nói "chính xác" 20 dấu hiệu. Tuy nhiên, đầu ra vô hạn bị cấm. Rõ ràng điều này không có nghĩa là tất cả chúng ta hãy bắt đầu xuất ra hàng trăm dấu "+" vì nó không bị cấm. Nhưng loại bỏ một đầu ra 21 đẹp sẽ không theo tinh thần của cuộc thi này.
LAST EDIT2 : xem xét LAST EDIT1 và chấp nhận thay đổi không gian , có vẻ như bây giờ chúng ta có 5 giải pháp khả thi, bốn trong số đó đã được chỉ ra trong các phản hồi. Tuy nhiên, thách thức cuối cùng chưa được thực hiện và tôi phải làm rõ một lần nữa: n phải được gán một giá trị khác , các giải pháp gán 20 cho n bằng một số thủ thuật sẽ không thực hiện được (như n = 20L). Ngoài ra tôi thích xem giải pháp thứ 3 không thay đổi không gian.
LAST EDIT3 : Tôi đã chỉnh sửa các câu hỏi cuối cùng, vui lòng đọc!
Thử thách là giải cả hai phần của câu đố. Người đầu tiên làm điều đó sẽ thắng.
Tôi hy vọng mọi thứ đều rõ ràng, nếu không xin vui lòng gửi bất kỳ câu hỏi nào và tôi sẽ chỉnh sửa nhanh nhất có thể. Chúc mừng. Đoạn văn bản được nhấn mạnh