这篇文章是为了帮助一些
像我这样的菜鸟
找到简单的题解
问题描述: 题目描述依次读入 n个整数 ai ,其中可能存在相同的元素。
对于每次读入的元素 ai,统计此时它一共出现的次数 ci,并在最后统计出 n 个元素中一共有多少个不重复的元素。
输入格式第一行:n (1≤n≤105) 。
第二行:n 个用空格隔开的整数ai (−109≤ai≤109) 。
输出格式输出共 n+1 行:
-
第 1∼n 行:输出当前元素 ai 及此时 ai 出现的次数 ci,中间用 1 个空格隔开。
-
第 n+1 行:一个整数,为 n 个元素中不重复元素的个数。
7 3 1 5 2 4 3 5样例输出
3 1 1 1 5 1 2 1 4 1 3 2 5 2 5问题解析:
这道题非常的简单
思路1:用map做
初始化每个元素为0
读入一个就加入一个
思路2:用set 与 multiset配合做
一个添加一个计数
本文选择思路一解答
好处:
1.不需要迭代器
2.简单方便
重点:
题目要求输出每一次查询的当前状态
就是这个数前面加上这次它出现了几次
不是总体有几次(我第一次就没看到)
题目代码:我们还是先把map和变量写好
mapmp;//两个都为int 一个为变量名 一个计数 int n,a[100005],i;
然后是读入和初始化
cin>>n;//读入行数
for(i=1;i<=n;i++)//也可以从0开始
{
cin>>a[i];//读入数组每个元素信息
mp[a[i]]=0;//mp中添加元素并初始化个数都为0
}
初始化玩了可以直接输出了
计数和输出部分
for(i=1;i<=n;i++)
{
mp[a[i]]++;//给当前个数加1
cout<
cout<完整代码: #include题目测评:using namespace std; map mp;//两个都为int 一个为变量名 一个计数 int n,a[100005],i; int main() { cin>>n;//读入行数 for(i=1;i<=n;i++)//也可以从0开始 { cin>>a[i];//读入数组每个元素信息 mp[a[i]]=0;//mp中添加元素并初始化个数都为0 } for(i=1;i<=n;i++) { mp[a[i]]++;//给当前个数加1 cout< 样例通过了
成功AC



