a+b=100

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yky__xukai/article/details/81450479

                                                        a+b=100                                

Description

给定一个无序的十进制序列,找出两个数的和为100的数对。 如-1 0 50 70 88 101 120中只有-1+101=100,因此只有一对。

Input

有多组测试数据,你的程序必须读到EOF为止。 每组数据两行,第一行一个整数N(2<=N<=10000),N表示给的数的个数,接下来一行N个整数,用空格隔开,这N个整数各不相同,且都在-2^31到2^31之间。N为0时,表示输入结束,不需要处理。

Ouput

对于每组数据,输出单独的一行,表示和为100的数对个数。

Sample Input

10

10 20 30 45 46 60 70 80 90 100

7

-1 0 50 70 88 101 120 0

Sample Output

3 1

超时代码:时间复杂度是O(n^2)

#include <iostream>
#include <stdio.h>
#include <cmath>
#include <cstring>
#define MAX 10001
using namespace std;
int main()
{
	int n,i,j,count;
	int a[MAX];
	while(cin>>n)
	{
		if(n==0) break;
		memset(a,0,sizeof(a));
		count=0;
		for(i=1;i<=n;i++)
		{
			cin>>a[i];
		}
		for(i=1;i<=n;i++)
		{
			for(j=i+1;j<=n;j++)
			{
				if((a[i]+a[j])==100)
				{
					count++;
				}
			}
		}
		cout<<count<<endl;
	} 
	return 0;
}

AC代码:O(n*log2(n))+O(n)=O(n*log2(n))

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std ;
int a[100002] ;
int MyCompare(const void *elem1,const void *elem2)
{
	int *p1,*p2 ;
	p1 = (int *)elem1 ;
	p2 = (int *)elem2 ;
	return (*p1)-(*p2) ;
}
int work(int num,int m)
{
	int k = m-1 ;
	int t = 0 ;
	while(t < k)
	{
		if(a[t] + a[k] == 100)
		{
			t++;
			k--;
			num += 1 ;
		}
		else if(a[t] + a[k] > 100)
			k-- ;
		else
			t++ ;
	}
	return num ;
}
int main()
{
	int m;
	int i,j ;
	while(cin>>m){
		if(m == 0)
			break ;
		memset(a,0,sizeof(a)) ;
		for( i = 0 ; i < m ; i++)
			cin>>a[i];
		qsort(a,m,sizeof(int),MyCompare) ;
		cout<<work(0,m)<<endl;
	}
	return 0;	
}

C 库函数 - qsort()

描述

C 库函数 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) 对数组进行排序。

声明

下面是 qsort() 函数的声明。

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

参数

  • base -- 指向要排序的数组的第一个元素的指针。

  • nitems -- 由 base 指向的数组中元素的个数。

  • size -- 数组中每个元素的大小,以字节为单位。

  • compar -- 用来比较两个元素的函数。

返回值

该函数不返回任何值。

实例

下面的实例演示了 qsort() 函数的用法。

#include <stdio.h>
#include <stdlib.h>

int values[] = { 88, 56, 100, 2, 25 };

int cmpfunc (const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}

int main()
{
   int n;

   printf("排序之前的列表:\n");
   for( n = 0 ; n < 5; n++ ) {
      printf("%d ", values[n]);
   }

   qsort(values, 5, sizeof(int), cmpfunc);

   printf("\n排序之后的列表:\n");
   for( n = 0 ; n < 5; n++ ) {
      printf("%d ", values[n]);
   }
  
  return(0);
}

让我们编译并运行上面的程序,这将产生以下结果:

排序之前的列表:
88 56 100 2 25 
排序之后的列表:
2 25 56 88 100

 

猜你喜欢

转载自blog.csdn.net/yky__xukai/article/details/81450479
A+B