計算機語言中除了硬編碼和基本循環方式外你還有那些方式輸出 1~100?
闡明使用語言、基本思路、貼上代碼
歡迎腦洞大開的方式
利用C++14帶初始化器的捕獲可以用一個語句實現:
#include &
#include &
#include &
int main() {
std::generate_n(std::ostream_iterator&
}
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&
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