首页 > 编程语言 >c++打卡十三天

c++打卡十三天

时间:2023-04-23 21:13:26浏览次数:45  
标签:int mid c++ 中间 十三天 数组 打卡 排序 100

一、问题描述。

 二、设计思路

①、首先我们是用二分法解决这个问题。二分法是指在一个有序数组中,我们通过目标数与数组中间值的比较,对半缩小数组范围,比如一个升序数组中间值是4,当我们寻找一个比四小的数字时,只需要从首位和中间值中寻找,然后继续确定新的中间值,长此以往,就可以有效地缩短寻找时间。

②、如果数组不是顺序排列的的,我么可以通过调用库函数对数组进行排序,调用头文件<algorithm>,使用sort函数进行排序,使用方法为sort(数组.begin(),数组.end(),排序函数),在这其中,排序函数我们可以自己编写是如何排序的,升序,降序,或者有规则的排序,都是可以定义的,系统默认的是进行升序排列,当然我们也可以调用sort(数组.begin(),数组.end(),greater<数据类型>)系统所给出的降序函数进行排序。

③、我们应该重点注意的是如何寻找这个中间值,

     首先,如果我们寻找数组为[1,100]和[1,100)

 

第一种情况,我们进入循环,结束条件为左值大于右值,即l>=r;进入循环,我们定义中间值为(l+r)/2,如果我们所要找的值小于中间值,那么我们让r=mid-1,因为我们判断过了所要找的值为小于值,所以限定范围可以变到[1,49],如果所要找的目标值大于等于中间值,那么范围就变成[50,100]。

第二种情况,如果所要找的值小于中间值,那么r=mid,范围为[1,50),大于等于中间值的话,l=mid,范围为[50,100)。

④、当目标值和mid值一样时,计入此时的下标,并打印,如果没有找到,就输出没找到。

三、流程图。

四、代码实现。

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
    int n;
    int target;
    int l=0;
    int mid;
    cin>>n;
    cin>>target;
        int r=n-1;
    int a[n];
    for(int i=0; i<n; i++) {
        cin>>a[i];
    }
    sort(a,a+n);
    while(l<=r) { //左闭右闭写法 如果左闭右开那么是(l<r)
        mid=(r+l)/2;
          if(target==a[mid]) {
              break;
        }
        else if(target<a[mid]) {    
            r=mid-1;
        } else  {
            l=mid+1;
        }
    }
    if(l<=r) {
        cout<<mid<<endl;
    } else {
        cout<<"没找到!!!"<<endl;
    }
    return 0;
}

五、结果

 

标签:int,mid,c++,中间,十三天,数组,打卡,排序,100
From: https://www.cnblogs.com/zzqq1314/p/17347756.html

相关文章

  • 每日一小时打卡pc端毕业设计(具有人脸专注度检测和人脸识别的监控功能)
               代码:#coding=utf-8importcv2ascvimportcv2importdatetimeimportbase64importtimeimportimutilsimportdlibfromimutilsimportface_utilsfromscipy.spatialimportdistanceasdistfromPILimportImage,I......
  • 打卡7
    定夺名次5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。 #include<stdio.h>intmain(){ inta=0; intb=0; in......
  • 每日打卡
    分糖问题:问题描述:某位老师给小孩子们分糖,10个小孩围在一圈,分糖数量如下:10,2,8,22,16,4,10,6,14,20。每个小孩同时将手中糖果的一半分给右边的小孩,分完后糖果为奇数的小孩可以向老师要一个糖果,问几次后每个小孩的糖果相等问题分析:先通过数学方法进行分析,十个小孩同时给一半的糖果给完后的......
  • 每日打卡-11.2
    一.问题描述定义一个分数类,包含分子、分母实验要求:含有无参的默认构造函数,并进行构造函数的重载;重载分数的加法+、减法-、数乘*这三运算符;重载分数的输入和输出运算符;重载分数的关系运算符==,!=,>=,<=;定义约简函数,使分子分母没有公因子。二.设计思路三.流程图四.伪代码 ......
  • 初学者代码训练Day6(c/c++)
    抓交通肇事犯要求一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。流程图代......
  • 建民の每日打卡12
    一、问题描述某银行月利息如下: 某人手上有2000元,存期20年。计算出收益最高的方案二、流程设计1.通过循环嵌套穷举出所有满足条件的方案,并计算出收益2.比较收益,将收益最大的一组数据输出三、流程图设计四、代码实现#include<iostream>#include<cmath>usingnamespace......
  • 第七天打卡
    一、问题描述假设银行一年整存零取的月利息为0.63%。现在某人手里有一笔钱,他打算在今后的五年中的每年年底去取出1000元,到第五年刚好取完,请算出他存钱应存入多少钱。二、设计思路1.根据题意,从第五年开始倒推前一年的存款,即定义sum储存,得出sum=(sum+1000)/(1+12*0.0063);2.利......
  • 4.23打卡
    一、问题描述: 爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩一阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问在1~N内,有多少个数能满足?二、设计思路:该问题要求输入N值,求解出在1-N的范围内存在......
  • 每天打卡一小时 第十四天 编译四部曲
    第一部曲自然语言找到V的最大值最小值什么是V的最大值 A/B就是V的最大值很好理解将所有最大值找出来其中的最小值便是整体的最大值那么什么是V的最小值  通俗一点就是A差一点就可以被B+1整除(75+1)/4=1919便是最小值找出所有的最小值其中的最大值便是整体的......
  • 【c&c++】vector 详解(C++)
    C++STL中的verctor好比是C语言中的数组,但是vector又具有数组没有的一些高级功能。与数组相比,vector就是一个可以不用再初始化就必须制定大小的边长数组,当然了,它还有许多高级功能。1.头文件#include<vector>2.初始化 如果vector的元素类型是int,默认初始化为0;如果vector元......