蓝桥云课 寻宝 C语言

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int n,m,star,sum=0,num;
	//n层m间 每层起始房间star 密码总数sum 每层逆时针倒数楼梯数num 
	scanf("%d %d",&n,&m);
	int map[n][m],math[n][m],max[n];
	//map为每层每间是否存在楼梯  math为每层每间需要倒数的楼梯  max为每层有楼梯间数和 
	for(int i=0;i<n;i++) 
	{
		max[i]=0;	//初始化 
		for(int j=0;j<m;j++) 
		{
			scanf("%d %d",&map[i][j],&math[i][j]);	//输入房间要求 
			if(map[i][j]==1) max[i]+=1;				//求每层有楼梯间数和 
		}
		
	}
	scanf("%d",&star);		//每层起点 
	for(int i=0;i<n;i++)	//层数 
	{
		sum=sum+math[i][star];	//每层第一间和 
		num=math[i][star];		//倒数
		num=num%max[i];			//通过减少每层转圈回到起点的次数,减少while循环次数 
		if(num==0) num=max[i];	//排除第一件即为有楼梯的干扰 
		while(num!=0)					//没走到要求楼梯口(距离要求楼梯口倒计时) 
		{
			if(star>m-1) star=0;		//超过序号从零开始 (环形建筑) 
			if(map[i][star]==1) num--;	//需路过楼梯口倒数 
			star++;						//房间循环(因为本层第一间楼梯口算第一个,所以房间循环在大循环末尾) 
		}
		star--;//num=0最后一次不需要进入下一个房间 
	}
 	sum=sum%20123;
	printf("%d",sum);
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值