您的位置:首页 > 其它

一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1

2014-05-31 21:11 786 查看
#include<iostream.h>
/*
本题假设N为2000,申请一个标记数组大小为n的一半,两个数的和为N+1,也就是2001
分析一个数小于等于1000,一个大于等于1001,这样如果一个数小于等于1000则放在tag【i】处
若大于则放在tag【2001-i】处,最后在遍历一下tag数组,元素为2的个数就是满足条件的对数
*/
void  main()
{
int a[2001]={1,401,63,173,1110,1223,114,108,201,310,1600,2000,1800,1000,1001};
int num=0,tag[1001]={0};

for(int i=0;i<2001;i++)
{
if(a[i]>1000)
tag[2001-a[i]]++;
else
tag[a[i]]++;
}

for(i=1;i<1001;i++)
if(tag[i]==2)
num++;
cout<<num<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐