PTA 到底有多二,部分正确

博客介绍了PTA题目L1-017,该题要求计算一个整数中数字2的出现频率与其位数的比例,负数和偶数有额外加权。例如,-13142223336的'犯二'程度是81.82%。

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

L1-017 到底有多二 (15 分)
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。

输入格式:
输入第一行给出一个不超过50位的整数N。

输出格式:
在一行中输出N犯二的程度,保留小数点后两位。

输入样例:
-13142223336
输出样例:
81.82%

#include<stdio.h>
#include<string.h>
int main()
{
   
	
<think>好的,用户想查找关于PTA平台上二分查找的相关内容和实现。首先,我需要回顾一下用户提供的引用内容,看看有没有相关的信息。 引用[1]提到案例1-1.1是二分查找,引用[2]是PTA 6-10的二分查找题目,要求实现函数接口。引用[5]给出了一个可能的答案代码,不过看起来像是顺序查找而不是正确的二分法,这可能是个错误。用户可能遇到了类似的问题,需要正确的实现方法。 接下来,我需要整理二分查找的标准实现步骤,确保符合PTA的要求。根据题目中的函数接口定义,函数需要接收一个列表和元素,返回位置或NotFound。正确的二分查找应该使用循环或递归,不断缩小搜索范围,而不是遍历整个数组,所以引用[5]的代码有问题,用户需要注意这一点。 然后,用户可能需要练习题和解决方案。引用[3]提到了PTA 7-18 二分法求多项式单根,这虽然是用二分法但不是查找算法,但可以说明PTA上有不同类型的二分法题目。引用[4]涉及有序表的操作,可能与二分查找的应用场景相关,比如增删改查中的查找部分。 最后,确保回答结构清晰,提供正确的代码示例,并指出常见错误,比如引用[5]中的错误实现。同时,生成相关问题帮助用户深入理解。</think>### PTA平台二分查找实现指南 在PTA平台中,二分查找的实现需要严格遵循题目要求的数据结构和函数接口。以下是针对PTA 6-10题目的标准实现步骤: #### 1. 函数接口定义 ```c Position BinarySearch(List L, ElementType X); ``` - `List L`:存储元素的升序数组(下标从1开始) - `ElementType X`:目标元素 - 返回值:找到则返回下标,否则返回`NotFound` #### 2. 正确实现代码 ```c Position BinarySearch(List L, ElementType X) { int left = 1; // 左边界 int right = L->Last; // 右边界 while (left <= right) { int mid = (left + right) / 2; if (L->Data[mid] == X) { return mid; } else if (L->Data[mid] < X) { left = mid + 1; } else { right = mid - 1; } } return NotFound; } ``` 注意:PTA题目中数组下标从1开始,需特别注意边界处理[^2][^5] #### 3. 常见错误分析 - **错误实现**:引用[5]中给出的代码实际上是顺序查找,而非二分法,这是典型理解错误 - **下标错误**:题目明确数组下标从1开始,但容易错误地写成从0开始 - **循环条件**:必须使用`while (left <= right)`才能覆盖所有情况 #### 4. 相关练习题 1. **基础题**:PTA 7-18 二分法求多项式单根(要求用二分法求方程根)[^3] 2. **进阶题**:习题10-11 有序表操作(结合插入、删除的二分查找应用)[^4] 3. **变式题**:案例1-1.1 二分查找(基础实现验证)[^1] #### 5. 调试技巧 ```c // 调试时可添加打印语句 printf("Searching [%d-%d], mid=%d\n", left, right, mid); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值