你这个程序使用的是什么样的算法?
这个程序再我看来,使用递归的思想是不错的
首先把已经摆好的牌从上到下编号
要想摆好第1张,先要把第2张摆好,第2张要求先摆第3张
也就是先摆第13张然后是第12张。。。然后是第2张,然后是第1张
应该是倒着来的
完全就是取牌时候的反向操作#include <iostream>
#include <list>
std::ostream &operator<<(std::ostream &os, const std::list<size_t> &rhs) {
for(const auto &i: rhs) os << i << " ";
return os;
}
int main() {
std::list<size_t> list;
for(size_t i = 13; i > 0; --i) {
list.push_front(i);
for(size_t j = 1; j < i; ++j) {
size_t temp = list.back();
list.pop_back();
list.push_front(temp);
}
}
std::cout << list << std::endl;
return 0;
}
|