【C语言】再次找的一些C语言题目,关于折半查找和某些种种

来源:互联网 发布:苹果完美越狱软件 编辑:程序博客网 时间:2024/05/20 20:17

首先我们来解释一下折半查找:

    1.对一组具有升序(降序)的序列取其中间值,啪一刀斩断,

    2.然后就进行比较啦,如果比较等于中间值,返回不解释。

    3.如果小于中间值,就将查找范围变成右(左)边。

    4.如果大于中间值,就将查找范围变成左(右)边。

    5.一直到左边参数大于右边为止咯;

////查找数值#include <stdio.h>void swap(int v[],int a, int b){             int temp;            temp = v[a];            v[a] = v[b];            v[b] = temp;}void qsort(int v[],int left, int right)    //写了一个快速查找的方法,进行排序{             int i,last;                    //博客前面有一篇有解释             if(left >= right)                         return;            swap(v,left,(left+right)/2);            last = left;             for(i = left +1;i <= right;i++)            {                         if(v[i] < v[left])                        swap(v,++last,i);            }            swap(v,left,last);            qsort(v,left,last-1);            qsort(v,last+1,right);}void BSearch(int v[],int f,int l,int r);int main(){int arry[10] = {0};int find = 0;int i = 0;int left = 0,right = sizeof(arry)/sizeof(arry[0]);printf("请输入一组数字(10个):");for(i=0 ;i < 10; i++){scanf("%d",&arry[i]);}printf("请输入想查找的数值");scanf("%d",&find);qsort(arry,left,right-1);BSearch(arry,find,left,right);return 0;}void BSearch(int v[],int find,int left,int right){int mid = 0;if(left >= right){return ;}while(left <= right){mid =(left + right)/2;if(v[mid] == find){printf("存在%d",find);return ;}else if(v[mid] < find){left = mid +1;}else if(v[mid] > find){right = mid -1;}}printf("不存在");}


    一个substr的实现,题目是这样的奥:

        编写一个函数,它从一个字符串中提取一个子字符串。函数原型如下:

int substr(char dst[], char src[],int start, int len)

{}

目标是:从 src 数组起始位置向后偏移 start个字符的位置开始,最多复制 len 个非NUL 字符到 dst数组。在复制完毕之后, dst 数组必须以 NUL字节结尾。函数的返回值是存储于 dst 数组中的字符串的长度。

    PS:其实题目还有一些要求,只是没有加入进去罢了:

//substr#include <stdio.h>#include <string.h>int substr(char dst[],char src[],int start,int len);int main(){char src[50];char dst[20];int count;int start = 0,len = 0;printf("请输入一串字符");scanf("%s",&src);printf("请输入开始的起始值");scanf("%d",&start);printf("请输入长度截取的");scanf("%d",&len);count = substr(dst,src,start,len);printf("%d",count);return 0;}int substr(char dst[],char src[],int start,int len){int i,j,count;j = 0;count = 0;if(start < 0 || (start+len) > strlen(src)){*dst = '\0';printf("开始点或长度不符合规则");return 0;}for( i = start-1;i < start + len-1;i++,j++){if(src[i] == '\0')return 0;dst[j] = src[i];count++;}dst[j] = '\0';return count;}

    有一个分数序列

       2/1+3/2+5/3+8/5+13/8+…

求出这个数列前 20 项的和。

//分母计算#include <stdio.h>int main(){double molecular,denominator,sum;int i;i = 0;sum =0;molecular = 2;denominator = 1;for( i = 0; i<20; i++){int temp = molecular;sum += (molecular / denominator);molecular += denominator;denominator = temp;}printf("%f",sum);return 0;}

    一个球从 100 米高的自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求第

10次落地时,共经过多少米,第 10 次反弹多高。

//高度计算#include <stdio.h>int main(){double height = 100;int count;double sum = 0;for(count = 0;count < 10;count++){sum += height;height /= 2;if(count < 9)sum += height;}printf("%f %f",sum,height);return 0;}

猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,好不过瘾,又多吃了一个。第二天早上又吃了剩下的桃子的一半,又多吃了一个。以后每天都吃了前一天剩下的一半零一个,到第 10 天早上想再吃的时候,就剩下一个桃子。求第一天共摘多少个桃子。

//猴子吃桃#include <stdio.h>int main(){int sum = 1;int day = 0;for( day=1; day < 10; day++){sum = (sum+1)*2;}printf("%d",sum);return 0;}


本文出自 “剩蛋君” 博客,请务必保留此出处http://memory73.blog.51cto.com/10530560/1676801

0 0
原创粉丝点击