和为s的两个数字 和为s的连续正数序列

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s,如果有多对数字的和等于s,输出任意一对即可。

复制代码
#include <iostream>

using namespace std;

//复杂度为O(n)
bool findnumber(int data[],int length,int sum,int &num1,int &num2)
{
    bool found=false;
    if(data==NULL||length<1)
        return found;
    int low=0,high=length-1;
    while(low<high)
    {
        long long cursum=data[low]+data[high];
        if(cursum==sum)
        {
            num1=data[low];
            num2=data[high];
            found=true;
            break;
        }
        else if(cursum<sum)
            low++;
        else
            high--;
    }
    return found;

}

int main()
{
    int data[5]={1,3,6,8,9};
    int length=5,num1=0,num2=0,sum=1;
    bool found=findnumber(data,length,sum,num1,num2);
    cout<<found<<"  "<<num1<<"  "<<num2;
}
复制代码

输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

复制代码
#include <iostream>

using namespace std;

void printnumber(int low,int high)
{
    for(int i=low;i<=high;i++)
        cout<<i<<" ";
    cout<<'\n';
}

void findnumber(int sum)
{
    if(sum<3)
        return;
    int low=1,high=2,middle=(1+sum)/2,cursum=low+high;
    while(low<middle) //注意low,非high,s=偶数
    {
        if(cursum==sum)
            printnumber(low,high);
        while(cursum>sum&&low<middle)
        {
            cursum-=low;
            low++;
            if(cursum==sum)
                printnumber(low,high);
        }
        high++;
        cursum+=high;
    }
}

int main()
{
    findnumber(9);
}
复制代码

 

posted @   home普通的人  阅读(169)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示