这道题其实本质上就是一个去重操作的题目,本道题的解法有很多可以一个一个枚举检测,或者使用桶排序等变态方法不胜枚举
其实有一个很容易的方法,初学者也可以简单掌握,就是运用人类历史上最伟大的发明,文明进步的垫脚石STL了。
其实可以实现去重操作的STL容器有不少,如map(映射)(本道题可以映射已经出现过的余数为true,然后没有出现就可以映射并将总量res++,最后res就是结果),set等,但是针对去重的就要数STL中的set(集合)了
向set致敬!
下面就是代码了,解说附在代码里
#include<stdio.h>
#include<set> //set头文件
using namespace std;
int n=10,a; //n为输入是10个数字
set<int> res; //本代码的重头戏[set]
int main()
{
while(n--) //循环输入
{
scanf("%d",&a);
res.insert(a%42); //将a%42插入res集合。insert(x)是set中的插入函数中最简单的一个插入函数,可以直接插入
}
printf("%d\n",res.size()); //因为set自带去重(其实会自动排序),所以只要直接输出它的元素个数就可以了。size()在set中是用来求一个集合中的元素个数的
return 0;
}
STL将来一定会成为大国重器编程领域中最有用的容器了,里面有vector,map,set等非常有用的容器,非常适合初学者的学习和使用,便捷简单,代码可读性高,又整齐,希望看完这篇文章的你会去更加深入地学习STL吧!