Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Nombor Boleh Dicetak Secara Berurutan dari 1 hingga 1000 Tanpa Gelung atau Pernyataan Bersyarat dalam C?

Bagaimanakah Nombor Boleh Dicetak Secara Berurutan dari 1 hingga 1000 Tanpa Gelung atau Pernyataan Bersyarat dalam C?

Susan Sarandon
Susan Sarandonasal
2024-11-26 17:37:10308semak imbas

How Can Numbers Be Printed Sequentially from 1 to 1000 Without Loops or Conditional Statements in C?

Menyelesaikan Enigma Mencetak Nombor tanpa Gelung atau Bersyarat

Cabaran mencetak nombor secara berurutan dari 1 hingga 1000 tanpa bergantung pada gelung atau bersyarat membina intrik pengaturcara dengan pendekatan yang tidak konvensional. Bagaimanakah tugas yang kelihatan mudah sedemikian boleh dicapai tanpa alat asas pengaturcaraan?

Membuka Kunci Penyelesaian dalam C

Penyelesaian, seperti yang ditunjukkan dalam coretan kod C di bawah , terletak pada mengeksploitasi aritmetik penunjuk dan rekursi.

#include <stdio.h>
#include <stdlib.h>

void main(int j) {
  printf("%d\n", j);
  (&&main + (&exit - &main)*(j/1000))(j+1);
}

Kod ini dengan bijak menggunakan penunjuk fungsi dan rekursi untuk mengelakkan keperluan untuk gelung atau bersyarat. Ia mengira alamat panggilan rekursif seterusnya berdasarkan nisbah j/1000. Dengan memanipulasi alamat fungsi utama dengan teliti, program ini secara berkesan mensimulasikan "lompat" ke nombor seterusnya dalam jujukan.

Varian dalam Standard C

Untuk mereka yang lebih suka pendekatan C yang lebih standard, kod berikut menghapuskan pergantungan pada aritmetik pada fungsi petunjuk:

#include <stdio.h>
#include <stdlib.h>

void f(int j)
{
    static void (*const ft[2])(int) = { f, exit };

    printf("%d\n", j);
    ft[j/1000](j + 1);
}

int main(int argc, char *argv[])
{
    f(1);
}

Kedua-dua coretan kod C ini menunjukkan kemungkinan mencetak nombor secara berurutan tanpa gelung atau bersyarat. Mereka mempamerkan kuasa memanipulasi penunjuk fungsi dan rekursi untuk mengatasi sekatan yang kelihatan tidak dapat diatasi.

Atas ialah kandungan terperinci Bagaimanakah Nombor Boleh Dicetak Secara Berurutan dari 1 hingga 1000 Tanpa Gelung atau Pernyataan Bersyarat dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn