zoukankan      html  css  js  c++  java
  • 算法与数据结构实验题 1.3 寻找幸运值

    ★实验任务

    给出两个已按升序排列的数组 a[1..n],b[1..m],如果存在 i,j,使得 a[i]+b[j]==k,我们便说已找到幸运值。请你判断能不能找到幸运值。

    ★数据输入

    输入第一行为正整数 n,m,k。(1<=k<=10^9) 第二行为 n 个正整数 a[1..n]。(1<=ai<=10^9) 第三行为 m 个正整数 b[1..m]。(1<=bi<=10^9) 80%的数据 1<=n,m<=1000. 100%的数据 1<=n,m<=100000.

    ★数据输出

    如果能找到幸运值,输出 yes。否则输出 no。

    输入示例 输出示例
    3 3 8
    1 2 3
    4 6 7
    yes
    输入示例 输出示例
    3 3 4
    1 2 3
    4 6 7
    no

    ★思路

    二分查找

    ★Code

     
                #include <stdio.h>
    #include <stdlib.h>
    
    int a[100002]={0};
    int b[100002]={0};
    
    bool Search(int *p, int l, int r, int num)                       //二分查找
    {
    	bool flag = false;                                  
    	while(l<=r)
    	{
    		int mid = (l+r)/2;
    		if(p[mid]==num)                                       //查找成功返回
    		{
    			flag = true;
    			break;
    		}
    		else if(p[mid]<num)                                 //继续在mid+1,r区间查找
    			l = mid+1; 
    		else                                                    //继续在l,mid-1区间查找
    			r = mid-1;
    	}
    	return flag;
    }
    
    int main()
    {
    	int n,m,k,i;
    	scanf("%d %d %d",&n,&m,&k);
    	for(i=0;i<n;i++)
    		scanf("%d",a+i);
    	for(i=0;i<m;i++)
    		scanf("%d",b+i);
    
    	bool flag = false;
    	for(i=0;i<n;i++)
    	{
    		if(Search(a,0,m-1,k-b[i]))
    		{
    			flag = true;
    			break;
    		}
    	}
    	if(flag)
    		printf("yes
    ");
    	else
    		printf("no
    ");	
    	return 0;
    }
    
            
    
  • 相关阅读:
    矩阵运算(二维数组)
    AndroidManifest.xml
    单位和尺寸
    java Map集合类
    http相关
    文件管理与XMl、JSON解析
    Handler与多线程
    App内容分享
    Fragment以及懒加载
    广播接收器与短信
  • 原文地址:https://www.cnblogs.com/031602523liu/p/7676056.html
Copyright © 2011-2022 走看看