难度:1
1 二分查找返回关键值key在长度为len的数组arr[]中的位置,没有key则返回-1
int bi_search( int key, int arr[], int len )
//1 二分查找返回关键值key在长度为len的数组arr[]中的位置,没有key则返回-1
#include <iostream>
using namespace std;
int binSearch(int arr[], int len, int key)
{
int low = 0;
int high = len - 1;
int mid;
while(low <= high)
{
mid = (low+high)/2;
if(key == arr[mid]) return arr[mid];
else if(arr[mid]>key) high=mid-1;
else low=mid+1;
}
return -1;
}
int main(){
int arr[] = {
1,2,3,4,5,6,7,8,9,10,11};
int key = 0;
printf("输入你要查找的数:\n");
scanf("%d",&key);
printf("查找的数 %d 在数组中的位置为:%d\n",key,binSearch(arr,sizeof(arr)/sizeof(arr[0]),key));
return 0;
}
执行效果:
2 实现指定整数的三种查询方法:
int linear_search( int arr[], int len, int key )
#include <iostream>
using namespace std;
int better_search(int arr[],int len,int key){
int i;
for(i=len-1;i>=0;i--){
if (arr[i]==key)
{
break;
}
}
return i;
}
int main(){
int n=10;
int arr[11]={
0};
printf("输入长度为10 的数组:\n");
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
int key;
printf("输入要查找的数:\n");
scanf("%d",&key);
printf("要查找的数的位置为:%d",better_search(arr,sizeof(arr)/sizeof(arr[0]),key));
return 0;
}
执行结果:
int better_search( int arr[], int len, int key )
#include <iostream>
using namespace std;
int linear_search(int arr[],int len,int key){
for(int i=0;i<len;i++){
if (arr[i]==key)
{
return i;
}
}
return -1;
}
int main(){
int n=10;
int arr[11]={
0};
printf("输入长度为10 的数组:\n");
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
int key;
printf("输入要查找的数:\n");
scanf("%d",&key);
printf("要查找的数的位置为:%d",linear_search(arr,sizeof(arr)/sizeof(arr[0]),key));
return 0;
}
执行结果:
int sentinel_linear_search( int arr[], int len, int key )
#include <iostream>
using namespace std;
int search(int arr[ ], int n, int k)
{
int i = n;
arr[0] = k; //0位置空出来
while (arr[i] != k)//要么在1--n处找到,要么在0处出while循环
i--;
return i;
}
int main(){
int n=10;
int arr[11]={
0};
printf("输入长度为10 的数组:\n");
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
int key;
printf("输入要查找的数:\n");
scanf("%d",&key);
printf("要查找的数的位置为:%d",search(arr,sizeof(arr)/sizeof(arr[0]),key));
return 0;
}
执行结果:
3 用递归的方法求解斐波那契数列第n项的值:
long fib( int n ) // 返回斐波那契数列第n项的值
#include <iostream>
using namespace std;
int f(int n){
if(n==1||n==2) return 1;
else{
return f(n-1)+f(n-2);
}
}
int main(){
printf("请输入要求第几个斐波那契数:\n");
int n;
scanf("%d",&n);
printf("第%d个斐波那契数的值为:%d",n,f(n));
return 0;
}
执行结果:
4 数组反转,给定长度为len的数组arr[],请将里面的元素反转,
如开始为{1,5,6,2,6,7,8} 反转后为{8,7,6,2,6,5,1}
void reverse( int arr[], int len )
int reverse(int arr[]){
int temp = 0;
int n = arr.size();
for(int i = 0; i< n/2; i++){
temp = arr[n-i-1];
arr[n-i-1] = arr[i];
arr[i] = temp;
}
return arr;
}
5 给定一个字符串,若里面含有相同的字母则返回1,否则返回0.
#include <iostream>
using<