编程题1-1 序列中两数相加是否等于给定数
【问题描述】有一个整数序列,设计一个算法判断其中是否存在两个元素的和恰好等于给定的整数k。
【输入形式】第一行一个整数n,代表整数的个数,n位于区间[2,100],第二行n个整数,代表整数序列的各个数,每个数位于区间[-10000,10000],第三行一个整数k,k位于区间[-20000,20000]
【输出形式】一个字符串,如果输入序列中存在两个整数相加等于k,则输出yes,否则输出no。
【样例输入】
5
1 -1 2 3 5
7
【样例输出】
yes
【样例说明】
疑问:代码该怎么改呢?请大家指教
序列1 -1 2 3 5中存在两个整数2和5相加等于7,所以输出yes
#include
#include
#include
using namespace std;
void merge(int a[],int low,int mid,int high)
{
int *tmpa;
int i=low,j=mid+1,k=0;
tmpa=(int *)malloc((high-low+1)*sizeof(int));
while(i<=mid&&j<=high)
if(a[i]else
{
tmpa[k]=a[i];
j++;k++;
}
while(i<=mid)
{
tmpa[k]=a[i];
i++;k++;
}
while(j<=high)
{
tmpa[k]=a[j];
j++;k++;
}
for(k=0,i=low;i<=high;k++,i++)
{
a[i]=tmpa[k];
}
free(tmpa);
}
void mergesort(int a[],int low,int high)
{
int mid;
if(low2;
mergesort(a,low,mid);
mergesort(a,mid+1,high);
merge(a,low,mid,high);
}
}
bool solve(int a[],int n,int k)
{
int i=0,j=n-1;
while(iif(a[i]+a[j]==k) return true;
else if(a[i]+a[j]else j--;
}
return false;
}
int main()
{
int n;
int a[1000];
cin>>n;
for(int i=0;i>a[i];
}
//sort(a,a+n);
mergesort(a,0,n);
int k;
cin>>k;
if(!solve(a,n,k))
{
cout<<"no"<else cout<<"yes"<return 0;
}
18行应该是 tmpa[k]=a[j];
71行应该是 mergesort(a,0,n-1);