牛骨文教育服务平台(让学习变的简单)
博文笔记

统计每个值连续出现的次数

创建时间:2015-10-04 投稿人: 浏览次数:1180

问题:输入一组数(相同的数字放在一起),写一个程序用来统计在输入中每个值连续出现了多少次。

程序代码:

#include <iostream>
using namespace std;

int main(){
    int currVal =0,val = 0;
    if ( cin >> currVal){   //读取第一个数
        int cnt = 1;
        while( cin >> val){
            if( val == currVal)
                ++cnt;
            else {
                cout << currVal << " occurs " << cnt <<" times " << endl;
                currVal = val;  //记住新值
                cnt = 1;        //重置计数器
                }
            }
            cout << currVal <<" occurs " << cnt <<" times " <<endl;
    }

    return 0;
}

思考过程:如何从前到后走一遍获得每个不同值出现的次数??

  • 分组,按组统计
    1. 把每组放到一个容器里(数组),最后统计每个数组的大小;
    2. 声明两个Vector,对应的位置分别放置当前Val值和出现次数count;
  • 线性遍历
    1. 进一步发展上述2的想法,每个Val值和次数count并不是要求同时并存的,得到一次即可立刻输出。因此反复利用两个变量就够了,一个存值,一个计数。
    2. 这是一个循环,考虑每个子过程:记录第一个出现变化的数currVal(保持不变,直至读入另一个变化的数),将后续的数一直和此数比,相同计数器增加一;不同更新currVal,计数器重置为1。
    3. 考虑边界值,第一个currVal为第一个数;最后一次遇到非法输入符不进入循环,故应将其结果特意地输出。

运行结果:
1. 测试用例1
测试用例1
2. 测试用例2
测试用例2
3. 测试用例3
测试用例3

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。