zoukankan      html  css  js  c++  java
  • 1244:和为给定数

    题目还是比较好理解的,就是从输入的数据里面找两个值,使得这两个数的和为给定的数M,

    举例来说,就是

    4//输入四个数
    2 5 1 4
    6//最终给定的和
    

     如果没有解 就输出No!;

    那来看看代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #define itn int
    using namespace std;
    int a[100000];//定义一个一维数组 
    int main()
    {
        int n,m,l,r,mid;//l左指针 r右指针 mid中间数 
        cin>>n;
        for(int i=0;i<n;i++)
        cin>>a[i];//输入数据 
        cin>>m;//和 
        sort(a,a+n);//按从小到大排序 
        for(int i=0;i<n;i++)
        {
            l=i;//左 
            r=n;//右 
            while(l<=r)
            {
                mid = (l+r)/2;
                if(a[i]+a[mid]==m)
                {
                    cout<<a[i]<<" "<<a[mid];//中间取 二分 
                    return 0;
                }
                else if(a[mid]+a[i]>m) r=mid-1;//大于就向左取 
                else l=mid+1;//小于就向右取 
            }
        }
        cout<<"No";//没有结果输出No 
        return 0;
    }
    

      先把这些数字从大到小排列,方便我们的二分,把中间项定义为mid(最左加最右/2)

    然后拿最左与mid来相加与m比较 若是大了就mid向左指一个,反之向右指一个。

    其中有一个代码,我一开始写的时候没有加上

    l=i;//左
            r=n;//右 
    

      没有明白为什么要这么做

    于是第一次交的时候就GG了

    后来加上了就AC了。

    所以二分一定要记得定义指针啊(这不是指针,但是作用差不多,别杠),不要忘记!!!

  • 相关阅读:
    Cookie操作插件 jQuery.Cookie
    jQuery移除事件
    c语言头文件
    关于srand(time(0)) rand() 的解释
    JAVA学习笔记——并发(一)
    JAVA学习笔记——访问权限控制
    CSS学习笔记——垂直水平居中
    JS学习笔记——私有变量
    JS学习笔记——ajax
    JS学习笔记——对象属性判断
  • 原文地址:https://www.cnblogs.com/--840-114/p/12957514.html
Copyright © 2011-2022 走看看