DEV怎么实现数学游戏的列举?
游戏规则:两人轮流报数,每次只能报1或2,把两个人报的所有数加起来,谁报数后和是10,谁就获胜。程序要求:穷举出所有的方法。
思路:把“每次报的数”和“从根结点累加的和”存放在二叉树的结点上。和小于10,就继续创建子结点;和等于或大于10就不再创建子结点。最后打印累加和为10的结点的父结点。
求实现以上思路的C代码。
程序代码:#include <stdio.h>
int main( void )
{
char buf[] = "1111111111";
////////////////////////////////
for( int last=sizeof(buf)-2; ; )
{
puts( buf );
int sum = -1;
for( ; last>=0 && (sum<0 || buf[last]!='1'); --last )
sum += buf[last]-'0';
if( last < 0 )
break;
buf[last] = '2';
for( ; sum>0; --sum )
buf[++last] = '1';
buf[last+1] = '\0';
}
} 随手写着玩的,若有错误 概不负责