社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
企鹅王国是一个奇特的国家。他们的电话号码包含11位数字,并且第一个数字一定是8。
例如88888888888就是企鹅王国的电话号码,但是13888888888和000就不是。
现在给出一个长度为n的字符串s,这个字符串只包含数字。每一次操作,你可以从这个字符串中删除任意一个字符。
对于给定的字符串,需要你判断是否能通过0次,或若干次操作,把这个字符串变成企鹅王国的电话号码。
第一行一个整数t,表示测试用例的组数;
接下来2*t行,每个测设用例包含2行;
第一行一个整数n,表示字符串的长度;
第二行一个字符串s
输入满足1<=t<=100,每个字符串只包含数字。
能则输出"YES",否则输出“NO"。
#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组数据后还没有结束?还可以输入 ?
后更。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!