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;}
相关文章推荐
- poj 百练 2808:校门外的树
- poj 百练 2742:统计字符数
- poj&nbsp;百炼&nbsp;2800:垂直直方图
- 自动安装并配置ODBC的思路与实现(自动创建MysqlDSN )
- Silverlight与JS交互
- PHP指定编码
- 匿名委托变量捕获的陷阱
- winform 项目获取app.config 中appSettings节点数据
- Dreamweaver 8中CSS样式表的若干问题
- ContentProvider初步
- 小李的委屈 ---- 交流技巧
- Kruskal算法
- Camera 图像处理原理分析- 抗噪 变焦 频闪 等
- Oracle创建普通表转换为分区表
- 分布式文件系统MFS(moosefs)实现存储共享
- Dreamweaver做ASP数据库的几个常见问题
- ICT实习第二周第一天
- Delphi中对TRichEdit控件的每一行设置不同的颜色
- Apache ActiveMQ单点基本配置
- [MS SQL]常用SQL语句大全2-技巧