C语言实现两个递减数列中寻找某一个数
本文实例讲述了C语言实现两个递减数列中寻找某一个数的方法,分享给大家供大家参考之用。具体方法如下:
通常来说这道题算二分查找法中非常有难度的一题了。
题目如下:
一个数组是由一个递减数列左移若干位形成,比如{4, 3, 2, 1, 6, 5}是由{6, 5, 4, 3, 2, 1}左移两位,在这种数组中查找某一个数。
实现代码如下:
int array[] = {4, 3, 2, 1, 6, 5}; const int size = sizeof array / sizeof *array; int findMinNumber(int (&array)[size], int start, int last, int dest) { int mid = (last - start) / 2 + start; int result; if(start > last) { return -1; } if(array[mid] == dest) { result = mid; return result; } if(array[mid] <= array[start]) { if(dest > array[mid] && dest <= array[start]) { last = mid - 1; result = findMinNumber(array, start, last, dest); } else { start = mid + 1; result = findMinNumber(array, start, last, dest); } } else if(array[mid] > array[start]) { if(dest < array[mid] && dest >= array[last]) { start = mid + 1; result = findMinNumber(array, start, last, dest); } else { last = mid - 1; result = findMinNumber(array, start, last, dest); } } return result; }
程序运行结果如下图所示:
希望本文所述对大家C程序算法设计的学习有所帮助。
相关推荐
-
C语言安全编码之数组索引位的合法范围
C语言中的数组索引必须保证位于合法的范围内! 示例代码如下: enum {TABLESIZE = 100}; int *table = NULL; int insert_in_table(int pos, int value) { if(!table) { table = (int *)malloc(sizeof(int) *TABLESIZE); } if(pos >= TABLESIZE) { return -1; } table[pos] = value; return 0; } 其中:p
-
C语言数组指针的小例子
1.功能:输入6个学生的5门课程成绩,计算出每个学生的平均分和每门课程的平均分.2.C语言实现代码:(其实就是用二维数组来实现的,二维数组的引用传递使用数组指针来完成) 复制代码 代码如下: #include <stdio.h>#define STUDENT 5#define SCORE 6void input_array(float (*score)[STUDENT]);void avg_score(float (*score)[STUDENT]);void avg_course(float
-
C语言中全局数组和局部数组的问题
今天同学遇到一个在C语言中全局数组和局部数组的问题,卡了许久,我也没有第一时间看出问题,现在把问题梳理一下,并给出解决方案. 问题描述: 在全局声明的数组与在局部声明的数组有着不同的效果. 首先来看一个程序: 复制代码 代码如下: #include <stdio.h> #include <stdlib.h> #define MAX 10 char a[MAX]; int main() { int i; char b[MAX]; char *c=(char *)malloc(MAX
-
c语言动态数组示例
复制代码 代码如下: #include <stdio.h>#include <stdlib.h> int main(){ //从控制台获取初始数组大小 int N; printf("Input array length:"); scanf("%d",&N); printf("\n"); //分配空间 int *a; a=(int *)calloc(N,sizeof(int)
-
C语言构建动态数组完整实例
本文以一个完整的实例代码简述了C语言构建动态数组的方法,供大家参考,完整实例如下: #include <stdio.h> #include <malloc.h> int main(void) { int len; int * arr; printf("请输入数组长度:"); scanf("%d", &len); arr = (int *)malloc(sizeof(int)*len); printf("请输入数组的值:&qu
-
深入理解c语言数组
一 数组名是什么 数组就是一段连续可用的内存.比如声明一个 int数组 int array[]={1,2,3}; array代表什么?有的资料说:数组名是指向数组首地址的常量指针. 下面我们可以验证一下.我都知道sizeof操作符可以返回一个对象或者类型所占的内存字节数.如:int i=1:那么sizeof(i) 的结果就是4(64位机器下的部分编译器是8) 那我们打印sizeof(array) printf("%d\n",sizeof(array)); 结果是:12. 但是我们都知道
-
C语言安全编码数组记法的一致性
对C语言程序来说,在同一文件中时,void func(char *a); 和 void func(char a[]); 完全等价 但在函数原型之外,如果一个数组在一个文件中声明为指针,在另一个不同的文件中声明为数组,那么它们是不等价的 示例代码如下: //main.c #include<stdlib.h> enum {ARRAYSIZE = 100}; char *a; void insert_a(void); int main(void) { a = (char*)malloc(ARRA
-
c语言中用字符串数组显示菜单的解决方法
以前写菜单方面东西时往往重复, 发现这个方法还可以, 用一个指针的指针解决遍历问题.代码如下所示: 复制代码 代码如下: #include <stdio.h>static char *menu[] = { "1 --- push one item./n", "2 --- pop one item./n", "3 --- quit./n", NULL};void Show_menu();int main(){ Show_menu
-
C语言柔性数组实例详解
本文实例分析了C语言柔性数组的概念及用法,对于进一步学习C程序设计有一定的借鉴价值.分享给大家供大家参考.具体如下: 一般来说,结构中最后一个元素允许是未知大小的数组,这个数组就是柔性数组.但结构中的柔性数组前面必须至少一个其他成员,柔性数组成员允许结构中包含一个大小可变的数组,sizeof返回的这种结构大小不包括柔性数组的内存.包含柔数组成员的结构用malloc函数进行内存的动态分配,且分配的内存应该大于结构的大小以适应柔性数组的预期大小.柔性数组到底如何使用? 不完整类型 C和C++对于不完
-
c语言的cps实现求fibonacci数列示例
CPS:http://en.wikipedia.org/wiki/Continuation-passing_style示例代码使用迭代 + 尾递归. 复制代码 代码如下: #include <stdio.h> typedef void (*END_OF_END)(unsigned long);void fibonacci(int, unsigned long, unsigned long, void(*)(unsigned long)); voidnotify(unsigned long re
-
约瑟夫环问题(数组法)c语言实现
问题说明这个问题是以弗拉维奥·约瑟夫斯命名的,它是1世纪的一名犹太历史学家.他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中.他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁.约瑟夫斯和另外一个人是最后两个留下的人.约瑟夫斯说服了那个人,他们将向罗马军队投降,不再自杀.约瑟夫斯把他的存活归因于运气或天意,他不知道是哪一个机智的约瑟夫! 有N个编号为1~N的人围成一圈,现在每隔两个人(比如:1.4 之间隔了2.3)就将一个人淘汰出去,问最后剩下的是编号为几的人? 算法代
-
C语言安全之数组长度与指针实例解析
1.C语言编码需要保证变长数组的长度参数位于合法范围之内 例如以下代码: void func(size_t s) { int vla[s]; /*...*/ } /*...*/ func(size); /*...*/ 解决方案如下: enum {MAX_ARRAY = 1024}; void func(size_t s) { if(s < MAX_ARRAY && s != 0) { int vla[s]; /*...*/ } else { //错误处理 } } /*...*/ fu
-
C语言二维数组的处理实例
复制代码 代码如下: char finalPathSet[256][256]; char middlePathSet[256][256]; int finalSetSize=0; int middleSetSize=0; int addToPathSet(char path[]){ strcpy(middlePathSet[middleSetSize],path); middleSetSize++;}int meetPathSet(){ char tempPathSet[256
随机推荐
- 详解Python中的日志模块logging
- C++中关于set删除的一些坑
- iOS 屏幕解锁文字动画效果
- 深度定制Python的Flask框架开发环境的一些技巧总结
- php匹配字符中链接地址的方法
- php 生成加密公钥加密私钥实例详解
- python 文件操作api(文件操作函数)
- python中的全局变量用法分析
- PHP新特性详解之命名空间、性状与生成器
- Python实现Linux下守护进程的编写方法
- javascript中常见的3种信息提示框(alert,prompt,confirm)
- C#连接mysql的方法【基于vs2010】
- MYSQL数据表损坏的原因分析和修复方法小结(推荐)
- IIS解析json的配置方法汇总
- js DNA动态序列比对代码
- jQuery使用EasyUi实现三级联动下拉框效果
- JavaScript自定义分页样式
- Java将GeoHash转化为对应的经纬度坐标实例代码
- C#批量插入数据到Sqlserver中的三种方式
- C# 得到某一天的起始和截止时间的代码