1552:Doubles:map迅速搞定二倍数的寻找

题目大意

作为算术能力计划的一部分,将为您的学生提供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;
	}
}
发布了211 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/csyifanZhang/article/details/105300516