列表

详情


MT28. 手机号

描述

    很多网站都要求用户输入手机号码,现在请写一个程序,判断用户输入的手机号码是否合法。本题中定义的合法手机号和现实中的手机号有出入,解题时以题面定义为准。
    一个合法的手机号码满足以下条件:
    (1)手机号码由 11 位数字构成。
    (2)手机号码的前三位为网络识别号,对应不同的手机运行商,在本题中只有以下几种(其余情况在本题中一律认为手机号不合法)
        中国电信:133,153,180,181,189
        中国联通:130,131,155,185,186
        中国移动:135,136,150,182,188
    (3)剩下 8 位数字任意
    现在输入手机号码,请判断是否合法

输入描述

第一行一个数 T ,接下里 T 行每行一个手机号,输入的手机号只由数字构成。

输出描述

输出 T 行,对每个手机号,如果满足题面定义, 电信号码输出 China Telecom 联通号码输出 China Unicom 移动号码输出 China Mobile Communications 如果不符合题面定义则输出 -1

示例1

输入:

5
13312345678
18687654324
18277748494
15898494958
45364

输出:

China Telecom
China Unicom
China Mobile Communications
-1
-1

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 228KB, 提交时间: 2019-01-14

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char head[4];
    char s[21];
    int tel_lab;
    int T;
    int i,j;
    int num_count;
    int len;
    scanf("%d",&T);
    for(i=0;i<T;i++)
    {
        tel_lab = 0;
        num_count = 0;
        memset(s,0,sizeof(s));
        memset(head,0,sizeof(head));
        scanf("%s",&s);
        len = strlen(s);
        if(len!=11)
        {
            printf("-1\n");
            continue;
        }
        for(j=0;j<3;j++)
            head[j] = s[j];
        if(strcmp("133",head)==0||strcmp("153",head)==0||strcmp("180",head)==0||strcmp("181",head)==0||strcmp("189",head)==0)
            tel_lab = 1;
        else if(strcmp("130",head)==0||strcmp("131",head)==0||strcmp("155",head)==0||strcmp("185",head)==0||strcmp("186",head)==0)
            tel_lab = 2;
        else if(strcmp("135",head)==0||strcmp("136",head)==0||strcmp("150",head)==0||strcmp("182",head)==0||strcmp("188",head)==0)
            tel_lab = 3;
        for(j=3;j<11;j++)
        {
            if(s[j]>='0'&&s[j]<='9')
                num_count++;
            else
                continue;
        }
        if(num_count==8&&tel_lab==1)
            printf("China Telecom\n");
        else if(num_count==8&&tel_lab==2)
            printf("China Unicom\n");
        else if(num_count==8&&tel_lab==3)
            printf("China Mobile Communications\n");
        else
            printf("-1\n");
    }
}

C 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2021-09-19

#include<stdio.h>
#include<string.h>
int main()
{
    char a[1000];
    int n,i;
    while (scanf("%d",&n)!=EOF)
    {
        getchar();
    	for(i=0;i<n;i++)
    	{
    	gets(a);
        if(strlen(a)!=11) printf("-1\n");
        else 
        {
            if((a[1]=='3'&&a[2]=='3')||(a[1]=='5'&&a[2]=='3')||(a[1]=='8'&&a[2]=='0')||(a[1]=='8'&&a[2]=='1')||(a[1]=='8'&&a[2]=='9'))
            {
                printf("China Telecom\n");
            }
            else if((a[1]=='3'&&a[2]=='0')||(a[1]=='3'&&a[2]=='1')||(a[1]=='5'&&a[2]=='5')||(a[1]=='8'&&a[2]=='5')||(a[1]=='8'&&a[2]=='6'))
            {
                printf("China Unicom\n");
            }
            else if((a[1]=='3'&&a[2]=='5')||(a[1]=='3'&&a[2]=='6')||(a[1]=='5'&&a[2]=='0')||(a[1]=='8'&&a[2]=='2')||(a[1]=='8'&&a[2]=='8'))
            {
                printf("China Mobile Communications\n");
            }
            else printf("-1\n");
        }
		}
    }
    return 0;
}

上一题