Ini adalah seri ke-3 dari seri C / C ++ saya; jika Anda melewatkan 2 yang pertama, mereka ada di sini: (1) puzzle pemrograman m3ph1st0s 1 (C ++) (2) puzzle pemrograman m3ph1st0s 2 (C ++): "Call hard!"
Saya harus mengatakan bahwa teka-teki saya 100% asli. Jika tidak, saya akan selalu menyatakannya dalam teks. Teka-teki 3 saya memiliki 2 bagian sebagai berikut:
Teka-teki 3.1
Bagian ini (3.1) bukan teka-teki asli saya, ini dikumpulkan dari beberapa halaman internet yang saya baca beberapa waktu lalu. Saya menggunakannya di sini sebagai titik awal dan pemanasan untuk Anda. Pecahkan yang ini dan kemudian lanjutkan ke bagian ke-2.
Seseorang mencoba mencetak tanda "+" sebanyak 20 kali dan muncul dengan program berikut:
#include <stdio.h>
int main() {
int i;
int n = 20;
for( i = 0; i < n; i-- )
printf("+");
return 0;
}
Fakta bahwa itu tidak memiliki hasil yang diharapkan jelas - program tidak pernah berakhir. Memperbaikinya! Mudah? Sekarang perbaiki program dengan mengubah HANYA SATU KARAKTER - karakter non-ruang tentu saja! Untuk tantangan ini ada 3 solusi. Temukan semuanya 3. Hanya untuk memperjelas: program harus menampilkan 20 "+" tanda dan harus berakhir dengan cepat. Sebelum mengkritik saya tentang apa arti "puasa", saya akan mengatakan itu berarti paling banyak beberapa detik (yang omong-omong terlalu banyak tetapi hanya untuk membuatnya lebih jelas).
Teka-teki 3.2
EDITED Telah ditunjukkan kepada saya sebelumnya bahwa solusi untuk puzzle 3.2.2 mungkin bergantung pada kompiler. Untuk menghilangkan kemungkinan diskusi tentang masalah ini, saya akan memodifikasi ide dan memperbaikinya pada teka-teki berikutnya ketika saya akan lebih berhati-hati untuk tidak menimbulkan kontroversi. Namun, untuk menjaga agar puzzle ini tetap berjalan, saya akan membuat modifikasi kecil untuk 3.2.2 (solusinya akan lebih mudah tetapi lebih bersih).
Ketika saya pertama kali melihat puzzle, saya merasa cukup mengagumkan. Saya berhasil menyelesaikannya tetapi tidak segera karena membutuhkan perhatian yang cermat. Jika Anda di sini itu berarti Anda juga menyelesaikannya. Jika Anda melakukannya dengan menulis program untuk mengganti semua karakter yang mungkin dengan semua nilai yang mungkin dan menguji setiap solusi, Anda akan hilang. Pria yang bekerja keras. Sekarang telah mengoreksi program yang menulis 20 "+" tanda:
3.2.1: Masukkan satu huruf tunggal dan tidak lebih dari kode sehingga hasilnya valid dan menghasilkan hal yang sama di semua 3 program yang diperbaiki. Tidak perlu dikatakan lagi, surat itu harus ada sebelum melampirkan} utama (saya katakan itu karena saya tidak ingin mendengar orang-orang yang hanya meletakkan surat setelah program dan entah bagaimana kompiler mereka sangat ramah).
Diedit (lihat di bawah) - Untuk pertanyaan akhir ini pertimbangkan bahwa penghitung i mulai dari -1 dan bukan 0.
3.2.1.5: Ulangi semua masalah sebelumnya dengan ketentuan bahwa output setidaknya 19 "+" tanda (tetapi masih merupakan output yang terbatas). Mengubah ruang diizinkan. Sekarang Anda mungkin telah menemukan lebih banyak solusi daripada dalam kasus pertama. Beberapa di antaranya pasti cocok untuk pertanyaan 3.2.2.
3.2.2: Pilih nilai lain untuk menginisialisasi variabel n sehingga output yang dihasilkan akan tetap sama untuk setidaknya satu program yang diperbaiki di 3.2.1.5 (tidak harus untuk semuanya).
EDIT1 TERAKHIR : mengubah program sehingga menghasilkan tanda 21 "+" masih merupakan solusi yang baik, karena teks aslinya tidak mengatakan "persis" 20 tanda. Namun, output tak terbatas dilarang. Jelas ini tidak berarti mari kita mulai mengeluarkan ratusan tanda "+" karena tidak dilarang. Tetapi menghilangkan 21 output yang indah tidak akan menjadi semangat kompetisi ini.
TERAKHIR EDIT2 : mempertimbangkan TERAKHIR EDIT1 dan menerima ruang berubah tampaknya sekarang kami memiliki 5 solusi yang mungkin, empat di antaranya telah ditunjukkan dalam tanggapan. Namun tantangan terakhir belum tersentuh dan saya harus membuatnya jelas sekali lagi: n harus diberi nilai lain , solusi yang menetapkan 20 ke n oleh beberapa trik tidak akan melakukannya (seperti n = 20L). Saya juga lebih suka melihat solusi ke-3 yang tidak mengubah spasi.
EDIT TERAKHIR3 : Saya telah mengedit pertanyaan terakhir, baca!
Tantangannya adalah untuk menyelesaikan kedua bagian teka-teki. Yang pertama melakukannya menang.
Saya harap semuanya jelas, jika tidak silakan kirim pertanyaan dan saya akan mengedit secepat mungkin. Bersulang. teks yang ditekankan