网易游戏开发软件笔试题1

来源:互联网 发布:网络电视剧上瘾全集 编辑:程序博客网 时间:2024/05/16 15:09

有一天,他在游戏中获得了一串数字,直觉告诉他这不是一串普通的数字串,或许可以破解一些关于网易的秘密。破解的第一步,他很想知道,在这串数字中,最多可以挑出多少个’9706’串。挑选的规则为:

(1)挑出的数字’9’,’7’,’0’,’6’在原串中可以不连续,但是数字的先后顺序不能改变

(2)使用过的数字不能被再次使用

如’123901370997606’可以最多挑出2个’9706’,而’6079’则无法挑出任何一个’9706’。

输入

第一行是整数T(T <= 100),表示下面有T组数据。

之后T行,每行为一组数据,每组数据为一个字符串。每个字符串的长度L <= 50000。每个字符串只会包含数字[‘0’…’9’]。

输出

输出T行,每行对应一个数据的输出结果,表示字符串最多能挑出多少个’9706’。
样例输入4
6097
97069706
997776600069
123901370997606
样例输出
0
2
1
2

答案

#include<iostream>#include<vector>using namespace std;void main(){       int lines;    char* data=new char[50000];    //字符串不能超过50000    vector<int> out;    cin >> lines;      //cin >> lines或者getline(cin,lines)遇到换行符则结束输入并输出结果    getchar();  //此处使用getchar()主要是因为int占两个字节,而getchar()每次只能读取一个字符,即一个字节。调用一次getchar()向后移动一个字节,因此能保证进入下面while循环时已经取走了‘\n’而等待输入;若是不加这句,则下面的while循环要多执行一次才能执行等待用户的输入。    while (lines-- > 0)    {           int cnt = 0;        int number[4] = { 0 };        while ((data[0] = getchar()) != '\n')    //每调用一次getchar()则向后读取一个字符        {            if (data[0] == '9')                ++number[0];            if (data[0] == '7'&&number[0]>number[1])                ++number[1];            if (data[0] == '0'&&number[1]>number[2])                ++number[2];            if (data[0] == '6'&&number[2] > number[3])                ++number[3];            //++cnt;            }        out.push_back(number[3]);    }    for (auto temp : out)        cout << temp << endl;    system("pause");}

这块主要考察的是对单个字符提取判别,使用getchar().
getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.getchar函数的返回值是用户输入的字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.

cin>>lines或者getline(cin,lines),遇到换行符则结束输入并输出

0 0
原创粉丝点击