《ACM程序设计》书中题目 M

题目简要:

这道题就是计算一组数前面的数的2倍正好等于后面的数的个数。

描述
作为算术能力计划的一部分,您的学生将获得2至15个唯一正整数的随机生成列表,并要求确定每个列表中有多少项目是同一列表中的其他项目的两倍。你需要一个程序来帮助你评分。这个程序应该能够扫描列表并输出每个列表的正确答案。例如,给出列表
1 4 3 2 9 7 18 22

你的程序应该回答3,因为2是两倍1,4是两倍2,和18是两倍9。

输入
输入文件将包含一个或多个数字列表。每行有一个数字列表。每个列表将包含2到15个唯一的正整数。没有整数将大于99.每行将以整数0终止,不被视为列表的一部分。具有单个数字-1的行将标记文件的结尾。下面的示例输入显示3个单独的列表。某些列表可能不包含任何双精度。

输出
输出将由每个输入列表的一行组成,包含与其他项重叠的项的计数

例如:

Sample Input

1 4 3 2 9 7 18 22 0
2 4 8 10 0
7 5 11 13 1 3 0
-1


Sample Output

3
2
0

解题思路:

这道题挺简单的,我的思路就是,将一组数放到双重循环中如果找到*2之后相等的数,就+1。

最后输出个数就好啦。

附代码;

#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i=0,j,k,l;
struct demo
{
int a[16];
int r;
}b[9999];
int d[9999];
while(cin>>n&&n!=-1)
{
b[i].a[0]=n;
for(j=1;j<16;j++)
{
cin>>b[i].a[j];
if(b[i].a[j]==0)
{
i++;
break;
}
}
d[i-1]=j;
}
for(j=0;j<i;j++)
b[j].r=0;
for(j=0;j<i;j++)
{
for(k=0;k<d[j];k++)
{
for(l=0;l<d[j];l++)
{
if(b[j].a[k]==2*b[j].a[l])
b[j].r++;
}
}
}
for(j=0;j<i;j++)
{
cout<<b[j].r<<endl;
}
return 0;
}

解题感受:

水题~~~挺简单的,要说感受就是尽量用STL解决问题吧,因为是很久以前做的,STL用的不熟,不过现在好多了···

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值