L1-083 谁能进图书馆 C语言

L1-083 谁能进图书馆

为了保障安静的阅读环境,有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆,除非有 18 岁以上(包括 18 岁)的成人陪同”。现在有两位小/大朋友跑来问你,他们能不能进去?请你写个程序自动给他们一个回复。

输入格式:
输入在一行中给出 4 个整数:

禁入年龄线 陪同年龄线 询问者1的年龄 询问者2的年龄

这里的禁入年龄线是指严格小于该年龄的儿童禁止入馆;陪同年龄线是指大于等于该年龄的人士可以陪同儿童入馆。默认两个询问者的编号依次分别为 12;年龄和年龄线都是 [1, 200] 区间内的整数,并且保证 陪同年龄线 严格大于 禁入年龄线

输出格式:
在一行中输出对两位询问者的回答,如果可以进就输出 年龄-Y,否则输出 年龄-N,中间空 1 格,行首尾不得有多余空格。

在第行根据两个询问者的情况输出一句话:

如果两个人必须一起进,则输出 qing X zhao gu hao Y,其中 X 是陪同人的编号, Y 是小孩子的编号;
如果两个人都可以进但不是必须一起的,则输出 huan ying ru guan
如果两个人都进不去,则输出 zhang da zai lai ba
如果一个人能进一个不能,则输出 X: huan ying ru guan,其中 X 是可以入馆的那个人的编号。
输入样例 1:

12 18 18 8

输出样例 1:

18-Y 8-Y
qing 1 zhao gu hao 2

输入样例 2:

12 18 10 15

输出样例 2:

10-N 15-Y
2: huan ying ru guan

代码:

#include<stdio.h>
int main()
{
	int a,b,c,d;
	scanf("%d %d %d %d",&a,&b,&c,&d);
	if(c>=a&&d>=a)  //两个人的年龄都大于等于禁入年龄线 
	{
		printf("%d-Y %d-Y\n",c,d);
		printf("huan ying ru guan");
	}
	else if(c>=a&&d<a)  //第一个人大于等于禁入年龄线 第二人小于 
	{
		if(c>=b)   //第一个人大于等于陪同年龄线 
		{
			printf("%d-Y %d-Y\n",c,d);
			printf("qing 1 zhao gu hao 2");
		} 
		else    //第一个人小于陪同年龄线 
		{
			printf("%d-Y %d-N\n",c,d);
			printf("1: huan ying ru guan");
		} 
	}
	else if(d>=a&&c<a) //第二个人大于等于禁入年龄线 第一人小于 
	{
		if(d>=b)   //第二个人大于等于陪同年龄线 
		{
			printf("%d-Y %d-Y\n",c,d);
			printf("qing 2 zhao gu hao 1");
		} 
		else    //第二个人小于陪同年龄线 
		{
			printf("%d-N %d-Y\n",c,d);
			printf("2: huan ying ru guan");
		} 
	}
	else         //两个人都小于禁入年龄线 
	{
		printf("%d-N %d-N\n",c,d);
		printf("zhang da zai lai ba");
	} 
	return 0;
} 
### L1-083 谁能图书馆 C++ 实现及解析 #### 问题描述 给定两个人的年龄 `age1` 和 `age2`,判断两人是否能够图书馆。具体规则如下: - 如果两人的年龄都小于最小入场年龄,则输出 "zhang da zai lai ba" 并分别标记为 N; - 如果其中一人的年龄介于最小入场年龄和最小陪同年龄之间,则该人需有成年人陪同才能入; - 如果两人都大于等于最小陪同年龄,则可以直接入。 #### 解析与实现 为了处理上述逻辑,可以通过位运算来简化状态管理。定义一个变量 `state` 来记录每个人的年龄情况,并通过按位或操作更新这个状态。最后根据不同的状态组合输出相应的结果[^4]。 以下是完整的C++代码实现: ```cpp #include <iostream> using namespace std; int main() { int age1, age2; const int min_entry_age = 18; // 假设最小入场年龄为18 const int min_parent_age = 30; // 假设最小陪同年龄为30 cin >> age1 >> age2; unsigned char state = 0b0000; if (age1 < min_entry_age) state |= 0b0001; // 设置第0位表示第一个孩子未达最低年龄 else if (age1 < min_parent_age) state |= 0b0010; // 设置第1位置表示第一个孩子需要大人陪伴 else state |= 0b0011; // 设置前两位均置高表示第一个孩子可单独入馆 if (age2 < min_entry_age) state |= 0b0100; // 设置第2位表示第二个孩子未达最低年龄 else if (age2 < min_parent_age) state |= 0b1000; // 设置第3位置表示第二个孩子需要大人陪伴 else state |= 0b1100; // 设置中间两位均置高表示第二个孩子可单独入馆 switch (state) { case 0b0000: cout << age1 << "-N " << age2 << "-N\n"; cout << "zhang da zai lai ba\n"; break; case 0b0001: // 只有一个小孩不符合条件的情况... case 0b0100: cout << ((state & 0b0001) ? age1 : age2) << "-N "; cout << ((state & 0b0100) ? age2 : age1) << "-Y\n"; cout << "you ren xu yao dadai\n"; break; default: cout << age1 << "-Y " << age2 << "-Y\n"; cout << "duo kuai le!\n"; break; } return 0; } ``` 这段程序首先读取两个整数作为输入代表两个人的年龄,接着依据设定好的年龄段划分标准设置二制标志位的状态值,再利用switch-case结构根据不同情形给出适当的信息反馈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大菜彩

家人们鼓励鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值