您的位置:首页 > 其它

poj 百练 2807:两倍

2014-01-13 16:01 232 查看
总时间限制:1000ms内存限制:65536kB描述给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。比如给定1 4 3 2 97 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。输入输入包括多组测试数据。每组数据包括一行,给出2到15个两两不同且小于100的正整数。每一行最后一个数是0,表示这一行的结束后,这个数不属于那2到15个给定的正整数。输入的最后一行只包括一个整数-1,这行表示输入数据的结束,不用进行处理。输出对每组输入数据,输出一行,给出有多少个数对满足其中一个数是另一个数的两倍。样例输入
1 4 3 2 9 7 18 22 0
2 4 8 10 0
7 5 11 13 1 3 0
-1
样例输出
3
2
0
思路:定义一个长度为16的数组,输入数组循环判断数组元素是否有0和第一个元素是否为-1,是则跳出输入,否则数组长度累加,计算实际长度。然后再判断数组第一个元素是否是-1,是则退出程序。然后排序,这样便于判断寻找。寻找类似冒泡排序,需要改变一下循环条件和判断条件。
注意运行一组后要对数组长度,数的个数重新赋初值0;可以在大循环开始时即赋初值。
c语言代码:
#includeint main(){int a[16];int i,j;while(1){int length=0,temp,m,count=0;//大循环内赋初值for(i=0;i<16;i++){scanf("%d",&a[i]);if(a[0]==-1)break;if(a[i]==0)break;length++;}if(a[0]==-1)break;for(i=0;ifor(j=i+1;jif(a[i]{temp=a[i];a[i]=a[j];a[j]=temp;}for(i=0;ifor(j=i+1;jif(a[i]%2==0){m=a[i]/2;if(a[j]==m)count++;}printf("%d\n",count);}return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: