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

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

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

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

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

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

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

#include 

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] 

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 

{

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] 

{

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 

#include 

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  strlen(src))

{

*dst = '\0';

printf("开始点或长度不符合规则");

return 0;

}

for( i = start-1;i 

{

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 

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 

int main()

{

double height = 100;

int count;

double sum = 0;

for(count = 0;count 

{

sum += height;

height /= 2;

if(count 

sum += height;

}

printf("%f %f",sum,height);

return 0;

}

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

#include 

int main()

{

int sum = 1;

int day = 0;

for( day=1; day 

{

sum = (sum+1)*2;

}

printf("%d",sum);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值