题目大意
作为算术能力计划的一部分,将为您的学生提供2到15个唯一正整数的随机生成列表,并要求他们确定每个列表中有多少项是同一列表中其他项的两倍。 您将需要一个程序来帮助您进行评分。 该程序应该能够扫描列表并为每个列表输出正确答案。 例如,给定列表
1 4 3 2 9 7 18 22
您的程序应回答3,因为2是两次1,4是两次2,而18是两次9。
输入
输入将包含一个或多个数字列表。 每行只有一个数字列表。 每个列表将包含2到15个唯一的正整数。 没有整数将大于99。每行将以整数0结尾,该整数不视为列表的一部分。 单号为-1的行将标记文件的结尾。
思路
小水题,可以用map或者自己用数组做一个map也可以,每当输入一个数我们就记录他,最后从头遍历,比如遍历到3,我们就检查6是否出现在数组中即可。
#include<iostream>
#include<string.h>
using namespace std;
#define MAX 20
#define ll long long
ll a[MAX];
ll map[300];
int main() {
while (true) {
ll cnt = 0, res = 0;
memset(map, 0, sizeof(map));
while (cin >> a[cnt] && a[cnt] != 0 && a[cnt] != -1) {
map[a[cnt]] = 1; cnt++;//记录一下输入元素
}
if (a[0] == -1)break;
for (int i = 0; i < cnt; i++) {
if (map[a[i] * 2])res++;
}
cout << res << endl;
}
}