牛客1010-[NOIP2016]玩具谜题 c语言题解

本文描述了一个C语言程序,使用结构体表示人物身份,通过输入指令让一组人在一个封闭环路上向左或向右移动,最后输出起始人物的身份。
摘要由CSDN通过智能技术生成
#include<stdio.h>
struct people//创建一个表明身份的结构体
{
	int face;//朝内0,朝外1
	char statues[1000];//储存不同的身份
};
int main()
{
	int n=0;//n个人
	int m=0;//m条指令
	int i=0;
	scanf("%d %d",&n,&m);
	struct people person[200000];//创建具体结构体数组
	for(i=0;i<n;i++)
	{
		scanf("%d",&person[i].face);
		scanf("%s",&person[i].statues);
	}
	int start=0;//明确起始点从零开始
	int order[200001][2]={0};//创建一个指令数组
	for(i=0;i<m;i++)
	{
		scanf("%d %d",&order[i][0],&order[i][1]);
		//order[i][0]表示左0右1
		//order[i][1]表示前进几步
		switch(order[i][0])
		{
		case 0://向左走
		{
			//判断朝内朝外
			switch(person[start].face)
			{
				case 0:
				{
				start-=order[i][1];
				while(start<0)
				{
					start+=n;
				}//实际上他们围成了一个圈,并非线性
				break;
				}
				case 1:
				{
				start+=order[i][1];
				while(start>n-1)
				{
					start-=n;
				}
				break;
				}
			}
			break;
			
		}
		case 1://向右走
		{
			switch(person[start].face)
			{
				case 0:
				{
				start+=order[i][1];
				while(start>n-1)
				{
					start-=n;
				}
				break;
				}
				case 1:
				{
				start-=order[i][1];
				while(start<0)
				{
					start+=n;
				}
				break;
				}
			}
			break;
		}
		}
	}
	printf("%s",person[start].statues);
	return 0;
}

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值