你的兄弟有可能更新他的6元素陣列而不需要6個嵌套循環。通過修改下面的increment
功能,你可以在任何「基地」算你選擇:
#include <algorithm>
#include <iostream>
#define NUM_CHARS 6
// assuming ASCII
// advances through a chosen sequence 0 .. 9, a .. z
// or returns -1 on overflow
char increment(char &c) {
if (c == 'z') return -1;
if (c == '9') { c = 'a'; return c; }
return ++c;
}
int main() {
char source[NUM_CHARS+1] = {0};
std::fill_n(&source[0], NUM_CHARS, '0');
while (true) {
std::cout << source << "\n";
int idx = NUM_CHARS;
// increment and test for overflow
while (increment(source[--idx]) == -1) {
// overflow occurred: carry the 1
source[idx] = '0';
if (idx == 0) return 0;
}
}
}
我沒有打擾的問題的「或更少」的一部分:但是你已經有6個環,做到了可能也會使用這種技術。嚴格來說,這是枚舉組合,這與計算幾乎不一樣。
您在演示中混淆了價值。純粹的計數不是一個可以給出基數的概念。重構版本你兄弟的解決方案可能是兩個更好的! – 2010-07-28 18:17:24
語言中沒有內置的base36構造。然而,你不需要分工去做你想做的事。 – driis 2010-07-28 18:17:38