(稍微讲一下思路,大约不算题解吧?)
大概想法就是用静态数组模拟栈,再用栈+循环模拟递归
那么我们先定义一个数组zb[14]并且初始化为0,然后定义一个整数ptr模拟指针
根据题意,我们需要做出三个解
所以第一层循环就是一个while循环,确保写完三个解以后退出循环:
while(flag<3){
......
}
在循环中,我们假设在进入某一次循环时已经放下的棋子是互相不能吃的
那么我们在某一次循环中的任务就很明确了:
a.如果已经放下了n枚棋子,那么输出zb[14],弹出栈顶元素(ptr--;zb[ptr]++)即可;
b.如果已放下的棋子个数小于n,那么尝试放下一枚棋子;
c.如果无法放下n枚棋子(zb[ptr]==n),那么弹出栈顶元素(ptr--;zb[ptr]++);
题目大约是默认了必然能够给出三个以上答案的,所以我们没有必要处理栈被弹空的情况。
这是一个蒟蒻写给其他蒟蒻看的,大佬们轻点喷(