描述
题目:输入一个已经按升序排序过的数组和一个数字,
在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
输入
输入:
1 2 4 7 11 15
15
输出
输出:
4 11
输入样例 1 点击复制
1 2 4 7 11 1515
输出样例 1
4 11
思路:
这道题的队列做法,头指针和尾指针指向的数字的和与输入数字对比,大了则尾指针往前移动,小了则头指针往后移动。
#include<stdio.h>
#include<string.h>
struct queue{int a[1001];int front;int rear;int maxsize;
};
int main()
{struct queue q;int n,cnt=0;char b;while(1){scanf("%d%c",&n,&b);q.a[cnt++]=n;if(b=='\n')break;}int ans;scanf("%d",&ans);q.maxsize=cnt;q.front=0;q.rear=cnt-1;while(q.front<q.rear){if(q.a[q.front]+q.a[q.rear]==ans){printf("%d %d",q.a[q.front],q.a[q.rear]);break;}else if(q.a[q.front]+q.a[q.rear]<ans){q.front++;}else{q.rear--;}}}