您的当前位置:首页正文

腾讯(2019笔试题)

2024-11-29 来源:个人技术集锦


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

1.企鹅王国号码题

题目描述

输入描述

第一行一个整数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;
}

测试结果

显示全文