腾讯(2019笔试题) - Go语言中文社区

腾讯(2019笔试题)



代码仅供参考,不保证测试全过。
博主正在学习中。
有问题欢迎及时指出,友善讨论。

1.企鹅王国号码题

题目描述

企鹅王国是一个奇特的国家。他们的电话号码包含11位数字,并且第一个数字一定是8。
例如88888888888就是企鹅王国的电话号码,但是13888888888和000就不是。
现在给出一个长度为n的字符串s,这个字符串只包含数字。每一次操作,你可以从这个字符串中删除任意一个字符。
对于给定的字符串,需要你判断是否能通过0次,或若干次操作,把这个字符串变成企鹅王国的电话号码。

输入描述

第一行一个整数t,表示测试用例的组数;
接下来2*t行,每个测设用例包含2行;
第一行一个整数n,表示字符串的长度;
第二行一个字符串s
输入满足1<=t<=100,每个字符串只包含数字。

输出描述

能则输出"YES",否则输出“NO"。

C++代码

#include <iostream>
#include <cstring>
// 两个条件,长度必须为11位,且开头为8
//第一种情况:长度<11位,根本不可能,直接输出No
//第二种情况,长度刚好11位,只需判断开头是否为8
//第三种情况,长度>11位,只要前n-num任意一位有8,都可以通过删除操作达到条件
//(注意此处只能进行删除操作,所以可以排除n-num后面有8也可以达到的情况)
//输入多组数据要怎么写?
using namespace std;
int main()
{
    int t,n;
    int num=0;
    
    int m=0;
    cin>>t;       
    while(t--!=0)     //控制输入多组数据
    {
        while((cin>>n)&&n!=0) // n为字符串的长度,第2行为字符串
        {
        char s[n];
        for(int j=0;j<n;j++)       // 输入长度为n 的字符串
            cin >> s[j];
       // 再分情况讨论输出结果                
        if(n<11)
        {cout <<"NO" <<endl; break;}
        else if(n==11)
        {
            if(s[0]=='8') {cout << "YES" <<endl;break;}
            else {cout << "NO" <<endl;break;}
        }
        else if(n>11)        // 当长度大于11,只要前n-num任意一位有8,都可以通过删除操作达到条件
                                    // 此处并没有让写删除操作,只是让判断能不能通过任意删除操作达到目的
        {
            int nnm=0;
            num=n-11;
            for(m=0;m<=num;m++)
            {
                if(s[m]=='8')
                nnm++;
            }
            if(nnm>=1)  cout << "YES" <<endl;
            else cout << "No" <<endl;
        }
        }
    }
    return 0;
}

测试结果
运行结果
这里会发现一个问题:输入了6组数据后还没有结束?还可以输入 ?
后更。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_40161242/article/details/101110888
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢