“教室占座”程序学习

问题描述:

小高和小曾是一对情侣,他们总是喜欢一起去教室学习,而且小高喜欢和小曾坐在一起,而且是每一行,只能左右两个坐一起,不能前后两个座位,也不能斜着两个座位;小高去占座,但她也不是每天最早的那个,教室里已经有了一些人(这个是随机),问她有多少个方案可以选择?

转化成C语言问题:有一个二维数组,在这里我们用1表示有人坐,用0表示没有人坐,二维数组的每行每列数值可以自由输入(对应现实问题中教室里人数的分布),然后在这个二维数组中,需要找到每行中都找到能够连着的两个座位方案!

思路:

假如这是一个四行四列的二维数组a[4][4](更多行多列依次类推)我们这样输入:                           1  0  0  0                                                                                                                                             0  0  1  0                                                                                                                                             1  0  0  1                                                                                                                                             0  0  0  1                       

 我们手动数一数有多少个方案选择:第一行,有连着的三个0,我们需要连着的两个0,所以一共有两种方案;第二行只有一种连着的两个0的方案;第三行有一种,第四行有两种;所以一共有6种方案!

所以现在必须得有一个循环,去遍历每一行,这里用for循环去表示;for循环的形式可以表示为:  

for(i=0;i<4;i++)

{

                ;//循环体语句

}

 这里还得有一个参量去数0,,这里假设为zero_num,这里给它赋初始值0;在遍历每一行时,当数到一个0之后,zero_num=1,然后去判断它的旁边有没有0,如果没有,就返回它的初始值0;而且中间也不能为1,如果两个0中间有1,这个参量也变为0;

这里我们拓展一下,小高还有一些朋友(电灯泡),想要和小高小曾他们一起坐,这里不仅仅是占两个座位的,是同一行连着占n个座位;

这里还需要一个变量去保存占座有多少种方案,这里假设为count,每当一行中达到2个连续空着的0之后,count=1;而且两个空着的0旁边如果还有0,count加1,每多一个空着的0,count加1;

代码实现:

int main()
{
	int n,i,j,t1,t2;
	printf("本代码将实现“好朋友占座位 ”的方案个数显示!\n");//只有一排中连着的座位
    printf("请输入你要占座的教室有几行几列?\n");
	scanf("%d%d",&t1,&t2);
	int a[t1][t2];
    printf("请输入你们教室的座位结构!\n");
	for(i=0;i<t1;i++)
	{
		for(j=0;j<t2;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	printf("请问你需要占几个座位?\n");
	scanf("%d",&n);
	int zero_num=0,count=0;
	for(i=0;i<t1;i++)
	{
		zero_num=0;//每一次换行,连着的0的个数清0 
		for(j=0;j<t2;j++)//每次判断列,列从第一列判断到最后一列 
		{
			//这个部分实现每次连着0的时候,实现的语句 
			if(a[i][j]==0)
			{
				zero_num++;
			}
			//如果每次不是连着的0的话,要实现的语句,zero_num置0 
			else
			{
				zero_num=0;
			}
			if(zero_num>=n)
			{
				count++;//大于要占座的方案数加1 
			}
		}
	}
	printf("在这个教室中,你要占%d个座位的方案有%d个!\n",n,count);
	return 0;
}

 代码运行结果:


这里注意:必须连着占座位,而且是每一行,所以先判断连着有没有符合我们占座个数的情况,如果有,再看它旁边还有没有空位,每多一个空位,方案就加1;


 这是我在学C语言中,通过老师讲解和询问同学对自己的学习的一个总结,文中有不对或说法不准确的地方,恳请各位大佬指正!


本人的评论区欢迎大家讨论技术性的问题!

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值