計算機語言中除了硬編碼和基本循環方式外你還有那些方式輸出 1~100?

闡明使用語言、基本思路、貼上代碼

歡迎腦洞大開的方式


利用C++14帶初始化器的捕獲可以用一個語句實現:

#include &
#include &
#include &
int main() {
std::generate_n(std::ostream_iterator&(std::cout, ", "), 100, [i = 1]() mutable { return i++; });
}

Wolfram 用 Range[] 就可以了:


用模板來實現其實還有一些更加modern C++的方法。

第一個實現利用了C++ 17的if constexpr,相比與拆成兩個函數更加清晰

template &
void print()
{
if constexpr (N &> 1)
print&();
std::cout &<&< N &<&< ; }

第二個實現利用了C++ 14的std::integer_sequence

template &
void printImpl(std::integer_sequence&)
{
using Dummy = int[];
static_cast&(Dummy{(std::cout &<&< 1 + N &<&< , 0)...}); } template &
void print()
{
printImpl(std::make_integer_sequence&());
}

還可以有一些奇奇怪怪的模擬函數式編程的寫法

[](auto self, int N) -&> void {
if (N &> 1)
self(self, N - 1);
std::cout &<&< N &<&< ; }([](auto self, int N) -&> void {
if (N &> 1)
self(self, N - 1);
std::cout &<&< N &<&< ; }, 100);


模板元編程。拋磚引玉吧,希望能看到有趣的答案~

#include &

template &
void print() {
print&();
std::cout &<&< n &<&< std::endl; } template &<&>
void print&<1&>() {
std::cout &<&< 1 &<&< std::endl; } int main() { print&<100&>();
return 0;
}


?100

這是 APL 語言代碼……

第一個字元 ? 就是前幾天的熱門問題《C++ 標準庫中的函數 iota 是什麼的縮寫?》里討論的那個東西,是 APL 的函數。


遞歸:

void dfs(int i) {
if (i == 0) return;
dfs(i - 1);
cout &<&< i &<&< endl; } dfs(100);

尾遞歸

void dfs(int i) {
if (i &> 100) return;
cout &<&< i &<&< endl; dfs(i + 1); } dfs(1);

數組構造函數:

int count = 1;
class T {
public:
T() {
cout &<&< count++ &<&< endl; } }; T* t = new T[100];


推薦閱讀:

數據結構和演算法(六):前綴、中綴、後綴表達式
浙江大學-數據結構-簡單排序-9.1.4
浙江大學-數據結構-簡單排序-9.1.2
浙江大學-數據結構-小白專場:C語言實現如何建立圖-6.5.2
Leetcodes Solutions 52 N-Queens II

TAG:演算法 | 計算機科學 | 數據結構 | CC |