Algorithm Problem:Telephone Number

博客围绕判断字符串能否通过删除字符操作变成电话号码展开。电话号码要求是 11 位且首位为 8。给定不同长度由数字组成的字符串,通过一系列操作判断能否转化为电话号码,最后给出示例及对应输出结果。

A. Telephone Number
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
A telephone number is a sequence of exactly 11 digits, where the first digit is 8. For example, the sequence 80011223388 is a telephone number, but the sequences 70011223388 and 80000011223388 are not.

You are given a string s of length n, consisting of digits.

In one operation you can delete any character from string s. For example, it is possible to obtain strings 112, 111 or 121 from string 1121.

You need to determine whether there is such a sequence of operations (possibly empty), after which the string s becomes a telephone number.

Input
The first line contains one integer t (1≤t≤100) — the number of test cases.

The first line of each test case contains one integer n (1≤n≤100) — the length of string s.

The second line of each test case contains the string s (|s|=n) consisting of digits.

Output
For each test print one line.

If there is a sequence of operations, after which s becomes a telephone number, print YES.

Otherwise, print NO.
Example
input
2
13
7818005553535
11
31415926535
output
YES
NO
My Answer Code:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin>>t;
    vector<string>s(t);
    vector<int>a(t);
    vector<int>firstindex(t,-1);
    vector<bool>ans(t);
    for(int i=0;i<t;i++)
    {
        cin>>a[i]>>s[i];
        if(a[i]<11){ans[i]=false;continue;}
        for(int j=0;j<a[i];j++)
        {
            if(s[i][j]=='8'){firstindex[i]=j;break;}
        }
        if(a[i]-firstindex[i]>=11&&firstindex[i]!=-1)ans[i]=true;
        else ans[i]=false;
    }
    for(int i=0;i<t;i++){if(ans[i])cout<<"YES"<<'\n';else cout<<"NO"<<'\n';}
    return 0;
}
Module 11 Graphs and Traversals Application Programming Assignment This Programming Assignment is based on Application Exercise 13.8.39: Describe an efficient algorithm that given a network of n stations connected by m high-speed connection links, represented by a graph, it computes, for each station, the set of stations it can reach using no more than four links. Describe the problem in terms of input and expected output clearly. Develop a program that accepts a network G of n switching stations connected by m high speed links, it will output for each station, the set of stations it can reach using no more than four links. Clearly specify all data structures and their implementations used to program the solution. In your submission, you must upload two files: Submit a typed Word or PDF document with description of your solution on LUMINA. Your answers should be very clear, in proper order, and use complete sentences. Review your work several times before submission to be sure the steps of the algorithm are clearly and properly stated and in the correct order. Provide pseudocode for the main algorithms, except for user interface, input/output, etc. Submit a single zip file named Telephone_ Network_Lastname.zip containing the code file and test files. Here are some further guidelines for programming code: Use an OOP language, such as Java, Python or C++. Comment your code. Your code file must compile and accept any number of inputs in the format you specified. You need to design an efficient algorithm which will run in O(n + m) running time that computes for each station, the set of stations it can reach using with maximum 4 links. This can be implemented by using the algorithms mentioned in the text book. Below is the input/output format we will consider for grading: Input: n = number of stations m = number of communication links List of 'm' pairs which represents link between stations Output: From each station list of stations that can be reached using no more than 4 links from each station From the input, you can construct a graph and perform your algorithm to find out a path for each station to reach all of the stations using no more than 4 links. Example Test cases: #Case-1 Input: n = 8 m = 10 links = [(0, 1), (1, 2), (1, 3), (2, 4), (2, 5), (3, 6), (3, 7), (4, 5), (5, 6), (6, 7)] Output: Reachable stations from station 0: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 1: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 2: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 3: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 4: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 5: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 6: {0, 1, 2, 3, 4, 5, 6, 7} Reachable stations from station 7: {0, 1, 2, 3, 4, 5, 6, 7} #Case-2 Input: n = 5 m = 4 connections = [(0, 1), (1, 2), (2, 3), (3, 4)] Output: Reachable stations from station 0: {0, 1, 2, 3, 4} Reachable stations from station 1: {0, 1, 2, 3, 4} Reachable stations from station 2: {0, 1, 2, 3, 4} Reachable stations from station 3: {0, 1, 2, 3, 4} Reachable stations from station 4: {0, 1, 2, 3, 4} This format needs to be followed while presenting your code. You can include Doctests or sample test cases in a separate text document which needs to be in the zip file Telephone_ Network_Lastname.zip.
最新发布
08-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值