前言:
这篇文章是为了帮助一些
像我这样的菜鸟
找到简单的题解
问题描述:
题目描述
依次读入 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和变量写好
map<int,int> mp;//两个都为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<<a[i]<<" "<<mp[a[i]]<<endl;//输出数字和个数 如题
}
cout<<mp.size();//最后输出一共有几个数字
完整代码:
#include<bits/stdc++.h>
using namespace std;
map<int,int> 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<<a[i]<<" "<<mp[a[i]]<<endl;//输出数字和个数 如题
}
cout<<mp.size();//最后输出一共有几个数字
return 0;
}
题目测评:
样例通过了