BITCS2016程序设计 | 10. 琪露诺的完美算数教室——⑨的统计I

本篇介绍了一个有趣的算法挑战,旨在计算指定范围内包含数字9的整数数量。文章详细阐述了解题思路,包括如何处理大数值,并提供了一组示例数据以帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

10. 琪露诺的完美算数教室——⑨的统计I

成绩 10 开启时间 2016年09月6日 星期二 11:00
折扣 0.8 折扣时间 2016年09月10日 星期六 23:55
允许迟交 关闭时间 2016年10月10日 星期一 23:55

众所周知,琪露诺(チルノ,Cirno)是幻想郷 (げんそうきょう)中首屈一指的天才,可以说⑨就是她的代名词。

然而如今,她遇到了一个和⑨有关的难题。你能帮助她么?

题目是这样的,给出两个数 a 和 b (0 <= a <= b <= 10^10000),求 a 到 b 之间(包括a和b)的数字中,有多少个数字是包含9的(例如 19,910 等都是包含9的数字)。

输入

第一行为一个数字 T (0 < T <= 100) 表示数据组数。
之后的 T 行,每行包含两个数 a 和 b (0 <= a <= b <= 10^10000)。

输出

对每组数据输入,输出一个数字,表示 a 到 b 之间的数字中(包括a和b),有多少个数字是包含9的。(注意:答案可能很大)

  测试输入关于“测试输入”的帮助 期待的输出关于“期待的输出”的帮助 时间限制关于“时间限制”的帮助 内存限制关于“内存限制”的帮助 额外进程关于“{$a} 个额外进程”的帮助
测试用例 1 以文本方式显示
  1. 1↵
  2. 0 9↵
以文本方式显示
  1. 1↵
1秒 64M 0
解题思路:
这道题的思路是先计算出第一个数的包含9的个数,示例中的[0,0],然后计算出第二个数包含9的数的个数,实例中的[0,9],这两个过程实际是一样的,然后将两个9的个数做差,因为检测9程序会忽略边界问题,所以还需判断输入的边界这个数是否包含9,若有则需在统计结果中+1。这道题还有一个难点就是数值很大,需要改写之前a+b的程序为1 0000 0000进制,好应对题设中对存储空间的局限。



结果:


这道题目的方法上借鉴了很多online上的思路贴,真心感叹自己要努力的地方还有很多!哈哈哈加油吧!





### Pandas 中 `unstack()` 方法将列索引转换为行索引的使用说明 `unstack()` 是 Pandas 提供的一种数据重塑方法,主要用于将多层索引中的行索引旋转为列索引。通过该方法,可以实现从行到列的维度转换,从而更方便地进行数据分析和可视化[^4]。 #### 1. 基本概念 `unstack()` 的核心功能是将 Series 或 DataFrame 中的行索引转换为列索引。如果数据具有多层索引(MultiIndex),则可以通过指定 `level` 参数来选择需要解栈的具体层级。默认情况下,`level=-1`,即最内层的索引会被解栈。 #### 2. 使用方式 以下是 `unstack()` 的基本语法: ```python DataFrame.unstack(level=-1, fill_value=None) ``` - **level**: 指定需要解栈的层级,默认值为 `-1`,表示最内层索引。 - **fill_value**: 用于替换缺失值的值。如果未指定,则默认为 `NaN`。 #### 3. 示例代码 以下是一个完整的示例,展示如何使用 `unstack()` 将列索引转换为行索引: ```python import pandas as pd # 创建一个示例 DataFrame data = { "姓名": ["古明地觉", "", "芙兰朵"], "科目": ["数学", "英语", "语文"], "分数": [95, 91, 87] } df = pd.DataFrame(data) # 将"姓名"和"科目"设置为索引,并提取"分数"列 two_level_index_series = df.set_index(["姓名", "科目"])["分数"] print("原始 Series 数据:") print(two_level_index_series) # 使用 unstack() 将二级索引转换为列 new_df = two_level_index_series.unstack() print("\n使用 unstack() 后的数据:") print(new_df) ``` 运行结果如下: ``` 原始 Series 数据: 姓名 科目 古明地觉 数学 95 英语 91 芙兰朵 语文 87 使用 unstack() 后的数据: 科目 数学 英语 语文 姓名 古明地觉 95.0 NaN NaN NaN 91.0 NaN 芙兰朵 NaN NaN 87.0 ``` #### 4. 处理多级索引 当数据具有多层索引时,可以指定 `level` 参数来控制哪一层索引被解栈。例如: ```python # 创建一个多层索引的 Series tuples = [ ("first", "one"), ("first", "two"), ("second", "one"), ("second", "two") ] index = pd.MultiIndex.from_tuples(tuples, names=["level_1", "level_2"]) series = pd.Series([1, 2, 3, 4], index=index) print("原始多层索引 Series 数据:") print(series) # 对第一层索引进行解栈 unstacked_data = series.unstack(level=0) print("\n对第一层索引解栈后的数据:") print(unstacked_data) ``` 运行结果如下: ``` 原始多层索引 Series 数据: level_1 level_2 first one 1 two 2 second one 3 two 4 对第一层索引解栈后的数据: level_2 first second level_1 one 1.0 3.0 two 2.0 4.0 ``` #### 5. 替换缺失值 在某些情况下,`unstack()` 可能会导致数据中出现缺失值(`NaN`)。可以通过 `fill_value` 参数来替换这些缺失值: ```python # 使用 fill_value 参数替换 NaN filled_unstacked_data = series.unstack(level=0, fill_value=0) print("\n使用 fill_value 参数替换 NaN 后的数据:") print(filled_unstacked_data) ``` 运行结果如下: ``` 使用 fill_value 参数替换 NaN 后的数据: level_2 first second level_1 one 1 3 two 2 4 ``` #### 6. 注意事项 - 如果数据结构过于复杂,可能需要结合 `stack()` 和 `unstack()` 来完成特定的重塑需求。 - 在调用 `unstack()` 后,可能会生成新的多层索引结构,需要根据实际情况调整数据格式。 - 如果需要将索引重置为普通列,可以使用 `reset_index()` 方法[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值