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
Lepaskan: 2024-11-26 17:37:10
asal
307 orang telah melayarinya

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);
}
Salin selepas log masuk

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);
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan