在C程序中,使用二分查找算法来搜索有理数,而不使用浮点数算术

在c程序中,使用二分查找算法来搜索有理数,而不使用浮点数算术

在这个问题中,我们得到了一个有理数的排序数组。我们必须使用二分搜索算法来搜索该有理数数组的给定元素,而不使用浮点运算。

有理数是以 p/q 形式表示的数字,其中p 和 q 都是整数。例如,⅔、⅕。

二分搜索是一种搜索技术,通过查找数组的中间来查找元素。

用于查找使用二分法搜索有理数排序数组中的元素,其中不允许浮点运算。我们将比较分子和分母,以找出哪个元素更大或哪个元素是要找到的元素。

示例

让我们为此创建一个程序,

#include struct Rational {   int p;   int q;};int compare(struct Rational a, struct Rational b) {   if (a.p * b.q == a.q * b.p)      return 0;   if (a.p * b.q > a.q * b.p)      return 1;   return -1;}int binarySearch(struct Rational arr[], int l, int r, struct Rational x) {   if (r >= l) {      int mid = l + (r - l)/2;   if (compare(arr[mid], x) == 0) return mid;   if (compare(arr[mid], x) > 0)      return binarySearch(arr, l, mid-1, x);   return binarySearch(arr, mid+1, r, x);   }   return -1;}int main() {   struct Rational arr[] = {{1, 4}, {2, 3}, {3, 2}, {7, 2}};   struct Rational x = {3, 2};   int n = sizeof(arr)/sizeof(arr[0]);   printf("Element found at index %d", binarySearch(arr, 0, n-1, x));}

输出

Element found at index 2

以上就是在C程序中,使用二分查找算法来搜索有理数,而不使用浮点数算术的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1443870.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 20:40:38
下一篇 2025年12月17日 20:40:52

相关推荐

  • JavaScript中如何实现二分查找_有序数组操作

    二分查找适用于已排序数组,时间复杂度O(log n),通过每次比较中间元素缩小区间;基础迭代实现用left/right指针和mid=left+Math.floor((right−left)/2)避免溢出,未找到返回−1;含重复元素时可找左右边界,需调整收缩逻辑并校验越界;递归版逻辑清晰但推荐迭代版;…

    2025年12月21日
    000
  • 二分查找是什么?二分查找的边界条件

    二分查找的边界处理需明确搜索区间为左闭右闭[left, right]或左闭右开[left, right),前者while条件为left 二分查找是一种高效的搜索算法,它通过不断将搜索区间减半来快速定位目标值。关键在于确定正确的边界条件,以避免无限循环或错过目标值。 二分查找的核心在于理解和正确处理边…

    2025年12月20日
    000
  • JavaScript中如何实现二分查找?

    在javascript中实现二分查找可以通过迭代或递归方式进行。1) 迭代实现:使用while循环,通过(left + right) / 2计算中间索引,复杂度为o(log n)。2) 递归实现:通过函数调用自身,同样是o(log n)复杂度,但需注意栈溢出风险。 JavaScript中如何实现二分…

    2025年12月20日
    000
  • c++ 二分查找代码 c++二分查找算法详解

    二分查找在有序数组中以O(log n)时间复杂度快速定位目标值,通过维护left和right指针,计算mid = left + (right – left) / 2避免溢出,比较arr[mid]与target决定搜索区间,迭代或递归实现,C++ STL提供binary_search、lo…

    2025年12月19日
    000
  • C++ 二分查找算法怎么写_C++算法面试高频题解析

    二分查找用于在有序数组中高效查找目标值,时间复杂度O(log n)。核心思想是每次缩小一半搜索区间,需满足数组有序且支持随机访问。标准写法使用闭区间[left, right],循环条件为left target)等函数,可简化实现。面试关键在于明确查找目标(任意位置或边界)、正确处理区间开闭与边界更新…

    2025年12月19日
    000
  • C++如何实现二分查找_C++ binary_search与lower_bound用法

    二分查找在有序数组中高效定位目标值,C++提供binary_search和lower_bound两个函数。binary_search返回布尔值判断目标值是否存在,lower_bound返回第一个大于等于目标值的迭代器,可用于获取插入位置或实际索引。两者均需数据有序,时间复杂度为O(log n),其中…

    2025年12月19日
    000
  • C++ lower_bound与upper_bound用法_C++有序序列的二分查找利器

    lower_bound返回首个不小于目标值的迭代器,upper_bound返回首个大于目标值的迭代器,二者结合可确定元素出现区间。例如在升序数组{1,2,4,4,5,7}中查找4,lower_bound指向索引2,upper_bound指向索引4,差值为出现次数2。降序排列时需传入greater()…

    2025年12月19日
    000
  • c++怎么实现二分查找算法_c++二分查找实现与优化

    二分查找在有序数组中以O(log n)时间复杂度定位目标值,C++可手动实现循环或递归版本,或使用STL函数优化。1. 循环版通过维护left和right指针,计算mid = left + (right – left)/2避免溢出,根据arr[mid]与target比较结果调整搜索区间,…

    2025年12月19日
    000
  • C程序将一个文件的内容复制到另一个文件中

    C文件I/O − 创建、打开、读取、写入和关闭文件 C文件管理 文件可用于存储大量持久数据。像许多其他语言一样,’C’提供以下文件管理函数: 创建文件打开文件读取文件向文件写入关闭文件 以下是’C’中最重要的文件管理函数: 函数 目的 fopen ()…

    2025年12月17日
    000
  • C程序按字母顺序排序姓名

    用户必须输入姓名的数量,并且这些姓名需要使用strcpy()函数按字母顺序排序。 字符数组(或字符集合)被称为字符串。 声明 以下是数组的声明: char stringname [size]; 例如,char string[50]; 长度为50个字符的字符串。 初始化 使用单个字符常量 char s…

    2025年12月17日
    000
  • 循环调度的C程序

    we are given with the n processes with their corresponding burst time and time quantum and the task is to find the average waiting time and average tu…

    2025年12月17日
    000
  • 使用冒泡排序算法对给定的数字列表进行升序排序的C程序

    在 C 编程语言中,冒泡排序是最简单的排序技术,也称为交换排序。 冒泡排序过程 将第一个元素与列表中的其余元素进行比较,如果它们不按顺序进行交换(交换)。 对列表中的其他元素重复相同的操作列表,直到所有元素都已排序。 算法 下面给出的是一种算法,通过使用冒泡排序技术 – 第 1 步 &#…

    2025年12月17日
    000
  • C程序打印带有当前时间的数字时钟

    在本节中,我们将了解如何使用 C 语言制作数字时钟。要处理时间,我们可以使用 time.h 头文件。该头文件有一些函数签名,用于处理日期和时间相关问题。 time.h 的四个重要组成部分如下 size_t 这个 size_t 基本上是无符号整数类型。这是sizeof()的结果。 clock_t用于存…

    2025年12月17日
    000
  • C程序使用rename()函数更改文件名

    rename函数将文件或目录从旧名称更改为新名称。此操作类似于移动操作。因此,我们也可以使用此rename函数来移动文件。 此函数存在于stdio.h库头文件中。 rename函数的语法如下: int rename(const char * oldname, const char * newname…

    2025年12月17日
    000
  • C程序示例,演示fork()和pipe()函数

    在本题中,我们将演示fork()和pipe()。在这里,我们将为 Linux 创建一个 C 程序,该程序将连接两个字符串,使用 2 个进程,其中一个进程将获取输入并将其发送给其他进程,其他进程将字符串与预定义的字符串连接起来并返回连接后的字符串。 第一让回顾一下fork()和pipe() fork(…

    2025年12月17日
    000
  • 不会在按下Ctrl+Z时暂停的C程序

    在编程中,当程序出现故障并在终端编译器中以异常方式运行时,程序员有权利显式停止程序的运行。要显式停止程序,用户必须知道需要按下的正确键盘快捷键。 为了终止代码块的执行,有两种类型的键盘快捷键被使用。 Ctrl+c – 用于停止程序的执行,它需要一些时间来完成输入/输出操作,然后暂停执行。…

    2025年12月17日
    000
  • C程序检查日期是否有效

    给定的日期格式为日期、月份和年份(整数)。任务是确定该日期是否可行。 有效日期范围应为 1/1/1800 – 31/12/9999,超出这些日期的日期无效。 这些日期不仅包含年份范围,还包含与日历日期相关的所有约束。 约束是 – 日期不能是小于 1 且大于 31月份不能小于 1 且大于 …

    2025年12月17日
    000
  • 递归插入排序的C程序

    插入排序是一种排序算法,它是一种基于就地比较的算法。 该算法的工作原理是将元素放置在已排序子数组中的位置,即元素之前的子数组是排序子数组。 算法 Step1 – 从 1 到 n-1 循环并执行 – Step2 .1 – 选择位置 i 处的元素,array[i]。 …

    2025年12月17日
    000
  • 六边形图案的C程序

    我们被给定一个整数’n’,任务是生成六边形图案并显示最终输出。 示例 Input-: n=5Output-: Input-: n = 4Output-: Approach we are using in the given program is as follows − In…

    2025年12月17日
    000
  • 一个使用C程序的谜题

    这里我们将看到一道 C 谜题。假设我们有两个数字 48 和 96。我们必须将第一个数字添加到第二个数字之后。所以最终的结果将是9648。但是我们不能使用任何逻辑、算术、字符串相关的操作,也不能使用任何预定义的函数。那么我们怎样才能做到这一点呢? 这很简单。我们可以通过在 C 中使用 Token Pa…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信