求和等于X

      一个长度为N的整型数组A[1,...,N],给定整数X,请设计一个时间复杂度不超过O(nlog2n)的算法

     思路:

     先对数组进行排序(快排O(nlogn)),然后分别从数组的小端和大端开始查找:

     若A[i]+A[j]>X,i++;

     若A[i]+A[j]<X,j--;

     若A[i]+A[j]==X,i++,j--;

     直到i>j;

     代码实现:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9   int a[100];
10   int n;
11   printf("%请输入数组的个数:\n");
12   scanf("%d",&n);
13   int x;
14   printf("请输入一个任意整数:\n"); 
15   scanf("%d",&x);
16   printf("请输入数组元素:\n");
17   for(int i=0;i<n;i++)
18       scanf("%d",&a[i]);
19       sort(a,a+n);
20    for(int i=0,j=n-1;i<=j;)
21       {
22           if(a[i]+a[j]<x)
23             i++;
24           else if(a[i]+a[j]>x)
25             j--;
26           else if(a[i]+a[j]==x)
27           {
28           printf("%d+%d=%d\n",a[i],a[j],x);
29           i++;
30           j--;    
31         }
32     }
33   return 0;
34 } 
View Code

 

posted @ 2016-07-03 15:19  太过随意  阅读(344)  评论(0)    收藏  举报