内容正文:
一 . 给定一个已按照升序排列的整数数组number, 请从数组中找出两个数相加之和等于目标数target,函数以长度为2的整数数组的形式返回这两个数的下标值。
考点: 数组、指针、函数的综合运用,二分查找法的简单运用
难度: 中等
示例: 数组number[5]={1,2,4,6,10}
① 输入:5;
输出:0 2
解释:数组中1与4的和等于5,1的下标值为0,2的下标值为1。
② 输入:8;
输出:1 3
解释:数组中2与6的和等于8,2的下标值为1,6的下标值为3。
#include<stdlib.h>
#include<stdio.h>
int *twoIndex(int *number,int numsize,int target,int *index)
{
int left,right;
left=0, right=numsize-1;
/*************start*************/
/*************end*************/
return index;
}
int main(){
int i,target,numsize;
int *p;
int index[2];
int numbers[]={1,2,4,6,10};
numsize=sizeof(numbers)/sizeof(int);
scanf("%d",&target);
p=twoIndex(numbers,numsize,target,index);
printf("数组中和为target的两个数的下标值分别为:
");
for(i=0;i<2;i++){
printf("%d ",*(p+i));
}
}
答案 :
while(left<right){
if(number[left]+number[right]==target){
index[0]=left;
index[1]=right;
break;
}
else if(number[left]+number[right]<target){
left++;
}
else{
right--;
}
}
样张1:
样张2:
二 . 给定一个非负整数X,计算并返回x的平方根,即实现int sqrt(int x)函数 (平方根有两个,但只输出其中的正数平方根,如果平方根不是整数,只输出整数部分,小数部分舍去。
考点: 二分查找法以及相关注意事项,函数的简单运用(二分法必须使用long,否则越界)
难度: 简单
示例:
输入: 64
输出: 8
输入: 63
输出: 7
#include<stdlib.h>
#include<stdio.h>
long mySqrt(int x){
long mid;
long left=1;
long right=x;
/*************start*************/
while(left<=right)
{
mid=left+((right-left)/2);
if(mid*mid<x){
left=mid+1;
}else if(mid*mid>x){
right=mid-1;
}
else{
return mid;
}
}
return right;
/*************end*************/
}
int main(){
int n;
scanf("%d",&n);
n=mySqrt(n);
printf("n的?正y平?方?根ù为a%d
",n);
}
样张1 :
样张2 :
学科网(北京)股份有限公司
$$