2 solutions

  • 0
    @ 2023-1-21 21:22:12
    #include<bits/stdc++.h>
    using namespace std;
    /*
    思路:将数组排序,统计连续相同的数有几个
    1、遇到每个数都C++
    2、C++之后判断连续相同的数是否结束
    结束标准:到了最后一个 || 当前数 != 下一个数 
    */ 
    int n, a[1010],c = 0;
    int main()
    {
    	cin >> n; 
    	for (int i = 0; i < n; i++){
    		cin >> a[i];
    	}
    	//排序
    	sort(a,a+n);
    	//统计连续相同的数出现的次数
    	for(int i = 0; i < n; i++){
    		c++;//统计连续相同的数出现的次数
    		//判断连续相同的数是否结束
    		if(i == n - 1 || a[i] != a[i+1]){
    			//输出
    			cout << a[i] << " " << c << endl; 
    			//计数器清零 
    			c = 0;
    		} 
    	} 
    	return 0;
    }
    
    
    
    • 0
      @ 2023-1-21 21:11:13
      这里采用STL的map,map会自动给数据排序。
      map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),
      这颗树具有对数据自动排序的功能,
      所以在map内部所有的数据都是有序的。
      map把值与键关联在一起,可以使用键来查找词。
      例如:键可以表示学号,而值 可以对应姓名。
      代码:
      #include<bits/stdc++.h>
      using namespace std;
      map<int,int> m;
      int n,x; 
      int main()
      {
          ios::sync_with_stdio(false);
          cin.tie(0);	
      	cin>>n;
      	for(int i=1;i<=n;i++)
      	{
      		cin>>x;
      		m[x]++;
      	}
      	map<int,int>::iterator iter;//遍历时需要定义一个迭代器
      	for(iter=m.begin();iter!=m.end();++iter)
      	{
      		cout<<iter->first<<" "<<iter->second<<endl;//iter->first 值的是键,iter->second指的是值。
      	}
      	return 0;
      }
      
      • 1

      Information

      ID
      1076
      Time
      1000ms
      Memory
      128MiB
      Difficulty
      10
      Tags
      # Submissions
      4
      Accepted
      3
      Uploaded By