题干
大致思路
n个问题,m个玩家,所以共有2的次方种结果,对应第一个图中的树状图。
先考虑一个玩家的回答,用s统计最后结果的序号。先让结果数num除以2,如果为y,则不做处理;如果为n,则令s+=num;依次类推往下判断。最后得到的s+1就是结果序号
#include<stdio.h>
#include<math.h>
void choice(char* p,int n)
{
char *q=p;
char *ql=p;
int num;
int s;
for(;*ql!='\0';ql+=n)
{
s=0;
num=pow(2,n);
for(;q<ql+n;q++)
{
num/=2;
if(*q=='n')
{
s+=num;
}
}
printf("%d\n",s+1);
}
}
int main()
{
int n,m,i;
scanf("%d %d",&n,&m);
char str[n*m+1];//注意还要包括最后的'\0'
char*p=str;
getchar();//吸收掉上面scanf输入的回车
for(;p<n*m+str;p+=n)
{
scanf("%s",p);
getchar();
}
*p='\0';
choice(str,n);
return 0;
}