B4021 [语言月赛 202408] 于抑郁中支持

· · 题解

题意

算出每个数的后 p 位,看有多少个不同。

思路

“看有多少个不同”可以直接想到“集合”,可能有朋友不知道“集合”是什么,“集合”是一个元素不可重复的东西。

在这里可以直接使用头文件 <set> 里的 set(集合)这个集合还会帮你排序(默认从小到大)如果你不想让它排序,你也可以使用 unordered_set

对于集合的定义:

set<int>st;//定义一个集合,名字叫 st

这里先输入,在输入的时候就把这个数的后 p 位放入集合中。

cin>>n>>t;
for(int i=1;i<=n;i++){
    cin>>x;
    int k=(x%((int)pow(10,t)));//后 t 位
    st.insert(k);//放入集合
}

最后,我们只需要输出当前这个集合存储了多少个数就可以了。

cout<<st.size();

扩展知识

这部分已经脱离题目了,而且只针对于学过指针的朋友。

集合 set 无法使用下标访问,只能使用指针set::iterator)但这个太难打了怎么办呢?C++ 11 给我们提供了 auto,它可以替代 set::iterator 进行遍历。

比如我要遍历集合 st,并输出 st 里的内容,我可以这样写:

for(auto v:st){
    cout<<v<<' ';
}