PAT

找一对数

2017-09-19  本文已影响4人  tingshuo123
/*
 * 找一对数
 *
 * 例题1:
 * 输入 n(n<100,000)个整数,找出其中的两个数,他们之和等于整数 m
 * (假定肯定有解)。题中所有的整数能用 int 表示。
 *
 * 解法:
 * 1) 将数组排序,复杂度是 O(n * log(n))。
 * 2) 查找时,设置两个变量 i 和 j,i=0, j=n-1; 如果 a[i]+a[j] > m
 *    j-1,小于则 i+1, 直至a[i]+a[j] = m,复杂度 O(n)。
 *
 **/
 
#include <stdio.h>
#define <stdlib.h>

int main(void)
{
    // 读入数据
    int m;
    scanf("%d", &m);
    int n;
    scanf("%d", &n);
    int *arr = (int *)malloc(sizeof(int) * n);
    for (int i=0; i<n; i++){
        scanf("%d", &arr[i]);
    }
    
    // 排序
    qsort(arr, n, sizeof(int), Compare);
    
    // 查找符合条件的两个数
    int i = 0, j = n-1;
    while (arr[i] + arr[j] != m){
        if (arr[i] + arr[j] > m){
            j--;
        } else {
            i++;
        }
    }
    
    printf("%d + %d = %d", arr[i], arr[j], m);
}
上一篇 下一篇

猜你喜欢

热点阅读