题目描述:
来源:海贼宝藏训练场
给出一个有 n个元素的数列 a 和一个整数 s ,其中数列 a 的元素是按照升序排列的。 请你在数列中找出两个元素 x,y ,使得 x+y=s。
问题分析:
问题的关键在于如何输入一个有n元素的数列a,查阅资料得,用malloc文件可以实现。for循环实现x+y=s,如果满足条件输入yes后停止循环,反之输出no。这里我用了j的值来判定:如果满足条件j的值肯定小于n,反之则大于等于n。
代码实现:
#include <stdio.h>
#include <malloc.h>
int main()
{
int n, s, i, p, j;
int* a;
scanf("%d", &n); //输入n的长度
a = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; i++)
scanf("%d", &a[i]); //输入长度为n的数组a
scanf("%d", &s); //输入要判定的数s
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)
{
if (*(a + i) + *(a + j) == s)
{
printf("Yes\n"); //肯定判定
break;
}
}
if (j < n) //减少循环次数
break;
}
if (j >= n)
printf("No\n"); //否定判定
return 0;
}
运行结果:
//个人愚见,有问题请指出,感谢!