问一下有关二叉树的算法解决思路
问一下有关二叉树的算法
题目是这样的,一个人参加比赛,共有十题,如果答对了当前分加倍,如果答错了则扣当前题号的分数,弃权算答错,起始分是10分,答完他的分为100分,列出所有的可能,以答对表示为1,答错表示为0,类似1111100000这样的序号打印出来。
我写的二叉树算法是这样的
void t(int num,bool b,int score)
{
if(b) score*=2;
else score-=num;
num++;
if(num>10)
{if(score==100)
{//不会输出序列怎么写。。。}
return;}
t(num,true,score);
t(num,false,score);
}
中间那段输出序列该怎么写啊?
------解决方案--------------------
这题当 扣完分数为0时,当前数加倍,一直会是0,这个地方,条件是怎么样的,分数为少于0吗?
------解决方案--------------------
#include<iostream>
using namespace std;
void t(int num,int b,int score,int a[])
{
if(b)
{
score*=2;
a[num]=1;
}
else
{
score-=num;
a[num]=0;
}
num=num+1;
if(num>10)
{
if(score==100)
{
for(int i=1;i<11;i++)
cout<<a[i];
cout<<"\n";
}
return;
}
t(num,1,score,a);
t(num,0,score,a);
}
int main()
{
int a[11];
int num=1;
int score=10;
int b=1;
t(1,1,score,a);
t(1,0,score,a);
cin>>b;
}
这样好像对了
题目是这样的,一个人参加比赛,共有十题,如果答对了当前分加倍,如果答错了则扣当前题号的分数,弃权算答错,起始分是10分,答完他的分为100分,列出所有的可能,以答对表示为1,答错表示为0,类似1111100000这样的序号打印出来。
我写的二叉树算法是这样的
void t(int num,bool b,int score)
{
if(b) score*=2;
else score-=num;
num++;
if(num>10)
{if(score==100)
{//不会输出序列怎么写。。。}
return;}
t(num,true,score);
t(num,false,score);
}
中间那段输出序列该怎么写啊?
------解决方案--------------------
这题当 扣完分数为0时,当前数加倍,一直会是0,这个地方,条件是怎么样的,分数为少于0吗?
------解决方案--------------------
#include<iostream>
using namespace std;
void t(int num,int b,int score,int a[])
{
if(b)
{
score*=2;
a[num]=1;
}
else
{
score-=num;
a[num]=0;
}
num=num+1;
if(num>10)
{
if(score==100)
{
for(int i=1;i<11;i++)
cout<<a[i];
cout<<"\n";
}
return;
}
t(num,1,score,a);
t(num,0,score,a);
}
int main()
{
int a[11];
int num=1;
int score=10;
int b=1;
t(1,1,score,a);
t(1,0,score,a);
cin>>b;
}
这样好像对了