标记门牌号

本文介绍了一个关于酒店门牌号设计的问题,需对倒置后与原号码相同的进行特殊记号处理。作者给出了C++代码示例,用于计算在给定楼层和房间数量的情况下,需要做特殊记号的门牌数。

优快云

系列文章目录

  1. 数位递增数_睡觉觉觉得的博客-优快云博客
  2. 拉线开关。_睡觉觉觉得的博客-优快云博客
  3. 蓝桥杯中级题目之数字组合(c++)_睡觉觉觉得的博客-优快云博客


前言

今天我们来做《标记门牌号》


一、个人名片

个人主页:睡觉觉觉得
🎐优快云新晋作者
🎉欢迎 👍点赞✍评论⭐收藏
✨收录专栏:C++蓝桥杯中级
🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗

二、描述

一家酒店有 F 层高(0<F<100),每层都有 n 个房间(0<n<100)
房间门牌号由不少于 3 位的数字组成:后两位是房间号,从 1 开始,不间断地排到n,不足两位的前面补零;前面一或两是楼层号,从 1 开始,不间断地排到F,前面不补零。
如 1 楼第 8 个房间门牌号是 108,12 楼第 16 个房间门牌号是 1216。
现在要为每个房间制作一个门牌号码的金属牌,每个金属牌都要定制模具,数字居中显示。
但如果某房间门牌上下颠倒过来的号码与原号码一模一样,
就需要做一个特殊记号,以免混淆方向。
例如:8008、1691、6119、818、619 等等。
因为数字 6 倒过来是 9;9 倒过来是 6;0、1、8 倒过来还是原数;其他数字倒过来不构成数字。对于多位数 618,倒过来看应该是 819,与原来不一样,就不用做记号了。
输入楼层数 F 和房间数 n,计算有多少房间的门牌号码需要做特殊记号

三、输入输出以及代码示例

1.输入

输入两个正整数 F(0<F<100)和 n(0<n<100)中间一个空格隔开,代表酒店
的楼层数和每层房间数:

输入样例:

2 5

2.输出

输出需要做特殊记号的门牌数:

输出样例:

1

3.代码示例

代码示例如下:

#include <iostream>
using namespace std;
bool pd1(int a)
{
	int t[5]={0,1,8,6,9};
	while(a>0){
		bool p=false;
		for(int i=0;i<5;i++){
			if(a%10==t[i]){p=true;break;}
		}
		if(!p)return false;
		a/=10;
	}
	return true;
}
bool pd2(int a)
{
	int t=0;
	int b=a;
	while(b>0){
		if(b%10==6)t=t*10+9;
		else if(b%10==9) t=t*10+6;
		else t=t*10+b%10;
		b/=10;
	}
	if(a==t)return true;
	else return false;
}
int main()
{
	int f,n;
	cin>>f>>n;
	int tj=0;
	for(int i=1;i<=f;i++)
		for(int j=1;j<=n;j++){
			int t=i*100+j;
			if(pd1(t)&&pd2(t)){
				cout<<t<<endl;
				tj++;
			}	
		}
	cout<<tj<<endl;
	return 0;
}

总结

没了记得点赞!
求关注

<think>我们有一个明确的需求:需要从上级下发的数据表格(包含门牌地址列)中,自动筛选出属于自己管辖地段的地址。这里涉及两个数据源: 1. 上级下发的数据表格(我们称其为“目标文档”),其中有一列是门牌地址。 2. 自己管辖的地址表格(我们称其为“管辖地址表”),里面列出了你所负责的所有门牌地址。 目标:自动比对这两个表格,从目标文档中筛选出那些门牌地址出现在管辖地址表中的行。 解决方案思路: 1. 读取两个表格:目标文档(上级下发)和管辖地址表。 2. 提取目标文档中的门牌地址列和管辖地址表中的地址列(注意:可能需要进行数据清洗,确保格式一致)。 3. 进行比对:检查目标文档中每一行的门牌地址是否出现在管辖地址表中。 4. 筛选出匹配的行,形成一个新的表格。 具体步骤(以Excel为例,也可以使用编程实现): a. 使用Excel的VLOOKUP函数或XLOOKUP函数: 在目标文档中新增一列(例如“是否管辖”),使用公式: =IF(ISNUMBER(MATCH([@门牌地址], 管辖地址表!$A$2:$A$1000, 0)), "是", "否") 然后筛选出“是否管辖”为“是”的行。 或者使用: =VLOOKUP([@门牌地址], 管辖地址表!$A$2:$B$1000, 1, FALSE) 如果返回非错误值,则表示匹配。 b. 使用高级筛选: 在Excel中,可以使用“高级筛选”功能,将“列表区域”设置为目标文档,条件区域设置为管辖地址表中的地址列(需要标题相同),然后可以将筛选结果复制到其他位置。 c. 使用Power Query(Excel中的数据查询工具): 1. 将两个表格都加载到Power Query中。 2. 在目标文档的查询中,添加一个自定义列,使用“管辖地址表”作为参考,检查当前行门牌地址是否在管辖地址表中(使用List.Contains函数)。 3. 筛选自定义列为true的行,然后加载到新表。 d. 使用编程方法(如Python的pandas库): 代码示例: import pandas as pd # 读取两个表格 target_df = pd.read_excel('目标文档.xlsx') # 上级下发的表格 jurisdiction_df = pd.read_excel('管辖地址表.xlsx') # 自己管辖的地址表 # 提取管辖地址列表 jurisdiction_list = jurisdiction_df['地址列名'].tolist() # 在目标文档中筛选 # 假设目标文档中门牌地址的列名为'门牌地址' result_df = target_df[target_df['门牌地址'].isin(jurisdiction_list)] # 保存结果 result_df.to_excel('筛选结果.xlsx', index=False) 注意事项: - 地址的格式可能不一致(比如空格、标点符号等),在比对前最好进行清洗(如去除空格、统一格式等)。 - 管辖地址表中的地址可能是范围(例如“XX路1-100号”),而目标文档中可能是具体门牌号(如“XX路58号”)。这种情况需要更复杂的匹配(可能需要使用正则表达式或自定义函数)。但根据问题描述,我们假设管辖地址表中是具体的门牌地址(每个地址一条记录),或者目标文档中的地址也是具体门牌号。如果不是,则需要另外处理。 根据引用[1]中的思路,我们也可以考虑在系统中集成权限管理,将用户与管辖区域绑定,然后根据当前登录用户自动筛选数据。但这里我们只关注于如何从表格中筛选。 引用[2]中提到在web应用中通过session来区分不同管理员的数据,这属于系统设计层面的权限控制。如果我们的需求是开发一个系统,那么可以在查询数据时根据当前用户的权限动态添加过滤条件(如SQL中的WHERE子句),而不是在客户端进行筛选。 因此,根据问题描述,我们主要关注于如何从两个表格中筛选数据,即数据处理的层面。 如果问题是在一个报表系统中(如引用[1]中的Reporting Services),那么我们可以: - 在报表中设置一个参数(比如用户ID),然后根据这个参数去查询该用户所管辖的地址列表,然后在报表的数据集中使用这个地址列表来过滤数据。 - 具体在Reporting Services中,可以在数据集查询中使用类似于以下的SQL: SELECT * FROM 目标文档表 WHERE 门牌地址 IN (SELECT 地址 FROM 用户管辖地址表 WHERE 用户名 = @UserName) - 其中@UserName是报表参数,由系统根据当前登录用户自动传递。 但是,用户的问题是如何自动比对筛选,因此我们提供了多种方法,包括离线的Excel操作和编程方法,以及集成到报表系统中的方法。 根据用户的需求,他可能需要的是在报表中实现动态过滤。但是,由于用户提到“自动比对筛选目标文档中门牌号”,并且有自己管辖的地址表格,我们假设他需要的是数据处理的方法。 因此,我们将提供详细的Excel和Python操作方法。 另外,如果用户希望实现类似引用[1]中的权限控制,那么需要在Reporting Services中设置基于用户角色的数据过滤。具体步骤: 1. 在数据源中设置安全连接(如集成Windows身份验证)。 2. 在报表服务器上设置角色分配,将用户/组分配到相应的文件夹和报表。 3. 在报表中,使用User!UserID全局变量获取当前用户,然后根据这个用户去查询其管辖的区域(可以事先建立用户与区域的映射表)。 4. 在数据集查询中使用该区域列表来过滤数据。 但是,由于用户的问题重点在“自动比对筛选”,我们首先提供通用的表格处理方法。 总结回答: 根据需求,我们提供以下两种场景的解决方案: 场景一:离线的表格处理(使用Excel或Python) 场景二:在Reporting Services中集成权限动态过滤 由于问题描述更偏向于场景一,我们重点给出场景一的详细步骤。 详细步骤(Excel使用公式方法): 1. 打开目标文档(上级下发数据)和管辖地址表。 2. 在目标文档中,确保门牌地址列有列标题(如“门牌地址”),在管辖地址表中,也确保有一列是地址(如“管辖地址”)。 3. 在目标文档中,新增一列(如“是否在管辖范围内”),在第二行输入公式(假设目标文档的门牌地址从A2开始,管辖地址表的地址列在Sheet2的A2:A1000): =IF(COUNTIF(Sheet2!$A$2:$A$1000, A2)>0, "是", "否") 或者: =IF(ISNUMBER(MATCH(A2, Sheet2!$A$2:$A$1000,0)), "是", "否") 4. 下拉填充整个列。 5. 使用筛选功能,筛选出“是否在管辖范围内”为“是”的行,然后复制到一个新表中。 注意:如果地址是文本且可能大小写不一致,可以使用EXACT函数或者统一转换为大写或小写。例如: =IF(COUNTIF(Sheet2!$A$2:$A$1000, LOWER(A2))>0, "是", "否") 但是COUNTIF不区分大小写,所以一般不需要。如果地址有空格等,可以使用TRIM函数: =IF(COUNTIF(Sheet2!$A$2:$A$1000, TRIM(A2))>0, "是", "否") 详细步骤(Python方法): 代码示例(假设两个表格都是Excel文件): </think> ### 自动比对筛选门牌号的方法 根据您的需求(从上级数据表中筛选属于自己管辖地段的门牌地址),结合引用内容中提到的权限控制思路,以下是完整的解决方案: #### 核心思路 1. **数据准备**:建立管辖地址库(包含所有管辖门牌号) 2. **权限绑定**:将用户与管辖范围关联(参考引用[1]的AD分组思路) 3. **自动筛选**:通过程序化比对实现数据过滤(参考引用[2]的Session控制) 4. **结果输出**:生成仅包含管辖范围内地址的数据集 --- ### 具体实现方案 #### 方法1:Excel公式法(适合小规模数据) ```excel =IF(ISNUMBER(MATCH(A2, 管辖地址表!$B$2:$B$1000, 0)), "保留", "排除") ``` - **步骤**: 1. 在上级数据表新增"筛选状态"列 2. 输入上述公式(假设A2是门牌地址列) 3. 筛选出所有"保留"标记的行 4. 使用TRIM()函数确保地址格式一致(避免空格干扰) #### 方法2:Python自动化(推荐大批量处理) ```python import pandas as pd # 读取数据 df_source = pd.read_excel("上级数据表.xlsx") # 上级下发数据 df_jurisdiction = pd.read_excel("管辖地址表.xlsx") # 管辖地段清单 # 标准化地址格式(移除空格/特殊字符) df_source["清洗地址"] = df_source["门牌地址"].str.replace(r"\s+", "", regex=True) df_jurisdiction["清洗地址"] = df_jurisdiction["门牌地址"].str.replace(r"\s+", "", regex=True) # 筛选管辖范围内数据 valid_addresses = set(df_jurisdiction["清洗地址"]) result = df_source[df_source["清洗地址"].isin(valid_addresses)] # 保存结果(参考引用[2]的权限分离逻辑) user_region = "广东区" # 从登录会话获取实际管辖区域 result.to_excel(f"{user_region}_筛选结果.xlsx", index=False) ``` #### 方法3:数据库集成方案(系统级实现) ```sql -- 参考引用[1]的权限管理架构 CREATE TABLE user_jurisdiction ( user_id VARCHAR(20) PRIMARY KEY, region_code VARCHAR(10) -- 关联管辖区域编码 ); -- 查询时自动过滤(集成到报表系统) SELECT s.* FROM source_data s JOIN address_mapping m ON s.address_id = m.address_id JOIN user_jurisdiction u ON m.region_code = u.region_code WHERE u.user_id = CURRENT_USER(); -- 自动识别登录者 ``` --- ### 关键注意事项 1. **地址标准化**(解决格式差异问题) - 统一省市区前缀(如"广东省深圳市" → "深圳") - 处理特殊符号("#", "-", "号"等) - 示例转换: ```python # Python标准化示例 def normalize_address(addr): return re.sub(r"[#\-栋单元层号]", "", addr).strip() ``` 2. **权限动态绑定**(参考引用[1][2]) - 在登录时加载用户管辖范围到Session - 通过中间表关联用户→区域→门牌号 - 避免硬编码,采用配置化管理 3. **边界情况处理** - 模糊匹配(如"XX路1-50号"匹配具体门牌) - 多级管辖逻辑(市→区→街道层级继承) --- ### 典型应用场景 1. **报表系统集成**(如Reporting Services) - 在数据集查询中添加`WHERE region IN (SELECT region FROM user_access WHERE user=@CurrentUser)` 2. **Web应用实现** ```python # Flask框架示例(参考引用[2]) @app.route('/report') def generate_report(): region = session.get('user_region') # 从会话获取管辖区域 filtered_data = Data.query.filter_by(region=region).all() return render_template('report.html', data=filtered_data) ``` ---
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

睡觉觉觉得

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值