Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Anda Boleh Mencetak Nombor 1 hingga 1000 Tanpa Gelung atau Pernyataan Bersyarat?

Bagaimanakah Anda Boleh Mencetak Nombor 1 hingga 1000 Tanpa Gelung atau Pernyataan Bersyarat?

Susan Sarandon
Lepaskan: 2024-11-25 06:53:12
asal
860 orang telah melayarinya

How Can You Print Numbers 1 to 1000 Without Loops or Conditional Statements?

Mencetak Nombor dari 1 hingga 1000 Tanpa Gelung atau Syarat

Cabaran yang dikemukakan kepada pengaturcara adalah untuk mencetak nombor dari 1 hingga 1000 tanpa menggunakan sebarang struktur gelung atau pernyataan bersyarat. Tugasan ini memerlukan pendekatan kreatif untuk mengelakkan kaedah biasa untuk melelaran melalui julat nombor.

Satu penyelesaian dalam C atau C mengeksploitasi sifat rekursif panggilan fungsi. Kod berikut memintas gelung dan syarat:

#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

Di sini, keajaibannya terletak pada penggunaan penunjuk fungsi. Ungkapan &utama mewakili alamat fungsi utama, manakala &keluar - &utama mengira saiz fungsi dalam ingatan. Dengan mendarab (j/1000) dengan nilai ini, fungsi secara rekursif memanggil dirinya sendiri, mengalihkan lokasinya dalam ingatan dengan jumlah yang sesuai. Ini membenarkan penambahan j sebanyak 1 dan meneruskan proses pencetakan tanpa sebarang mekanisme gelung yang jelas.

Memandangkan kod asal mempunyai masalah dengan aritmetik penunjuk, versi yang dipertingkatkan dalam standard C disediakan di bawah:

#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

Dalam versi ini, susunan statik penunjuk fungsi digunakan untuk mengelakkan kebimbangan aritmetik penunjuk. Fungsi utama memulakan tatasusunan dengan dua elemen: f itu sendiri untuk meneruskan rekursi dan keluar apabila nilai j akhir dicapai, menandakan tamatnya proses.

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

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