牛客题目:手机号码

手机号码

https://ac.nowcoder.com/acm/problem/21297

题目描述:给你一个整数n表示手机号码的位数再给你m个字符串表示保留的号码,比如911 110 120等,问你一共有多少的手机号码不以保留号码开头
分析:不已保留号码开头的手机号码有多少个,要注意的是如果保留号码为1 那么如果后面还出现了100,102之类的以1开头的都不用算了,所以我们将保留号码的类型定义为字符串,因为字符串有find()函数,可以查询某个字符串是不是另外一个字符串的子串,如果字符串a是字符串b的子串那么将字符串b赋值为“null”,经过两个循环后就只剩最简单的那几个字符串(最简单的字符串就是在整个字符串数组里面,该字符串不是任何字符串的子串)接下来就很简单了
源代码:

#include<bits/stdc++.h>
using namespace std;
long long pows(int n)//该函数的作用是算10的n次方
{
    long long sum=1;
    for(int i=0;i<n;i++)
    {i
        sum*=10;
    }
    return sum;//返回一个long long 类型的,因为int类型装不下这太大的数字
}
int main()
{
    int n,m;
    long long sum1=0;
    cin>>n>>m;
    string number[1000];//定义一个字符串数组用来装保留号码
    for(int i=0;i<m;i++)cin>>number[i];
    sort(number,number+m);//这个可有可无吧,加一个也没关系
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(j!=i&&number[j].find(number[i])==0)//如果number[i]是number[j]的子串那么就处理number[j]
            {
                number[j]="null";
            }
        }
    }
    for(int i=0;i<m;i++)
    {
        if(number[i]!="null")
        {
            sum1+=pows(n-number[i].length());//算出以保留号码开头的手机号的数目
        }
    }
    printf("%lld",pows(n)-sum1);
}
全部评论

相关推荐

缓解焦虑的最好方法是回家。鼠鼠昨天上午考完了本科阶段的最后一场考试,大概率考得稀烂,但是没多想,考完立马收拾行李,坐上了提前约好的顺风车飞奔回家。虽然家和学校很近,只有一百多公里的路程,但距离上次回家也已经有三四个月了。每次想回家,期间总有考试、毕业设计、面试、实习等等各种各样的原因,没办法回去,待在学校和公司的每一天也都充斥着无形的压力和焦虑。现在终于完成了答辩,考完了试,公司那边也请了假,是时候回去一趟了。没有提前通知爸妈,想给他们一个惊喜。下午提前到了家,他俩还在上班,只好让外公外婆来给我开门。因为我的回家,晚上外婆在厨房格外忙碌,做了满满一大桌子菜,填饱了我天天吃外卖的肚子。晚上也没空...
梦想是成为七海千秋:取决于家庭吧?其实回家更焦虑了,每天起床父母都问实习找好了没简历投递了没今天有没有面试,但是又没有什么结果,玩两下手机父母就会说你看你啥也没找到为什么天天就知道刷手机,怎么不去学习…我现在就希望我能永远在外面实习,报喜不报忧,等拿到一个好offer再回家
点赞 评论 收藏
分享
Twilight_mu:经典我朋友XXXX起手,这是那种经典的不知道目前行情搁那儿胡编乱造瞎指导的中年人,不用理这种**
点赞 评论 收藏
分享
06-13 21:59
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务