#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;
}
蓝桥云课 寻宝 C语言
于 2024-03-10 16:20:00 首次发布