学习记录–连续抛硬币N次,那么不连续出现正面的可能情况有多少种(即任何相邻两次都不全是正面)
输入只有一行一个整数N,表示抛N次硬币。(1≤N≤14 )
写一个程序,输出所有的可能情况(用0表示反面,1表示正面)。
输出有M+1行。
前M行输出每一种可能情况,不同情况按照字典序从小到大排列。
最后一行输出一个数字M,表示不连续出现正面的可能情况的总数。
#include<stdio.h>
void coin(int step);
void PRINT_count();
int n,str[15],count=0; //n代表抛硬币次数
int main()
{
int count;
scanf("%d",&n);
coin(0);
PRINT_count();
}
void coin(int step)
{
int i,j;
if(step==n)
{
for(j=0;j<n;j++)
{
if(str[j]==1&&str[j+1]==1) //排除连续为1的情况
return ;
}
for(i=0;i<n;i++)
printf("%d",str[i]); //打印情况
if(i==n)
{
printf("\n");
count++;
}
return;
}
for(i=0;i<=1;i++)
{
str[step]=i; //尝试所有情况
coin(step+1);
}
}
void PRINT_count()
{
printf("%d",count);
}