【蓝桥杯竞赛】例题: 487-3279

分析:

str数组接受不规范的电话字符串,number数组储存标准化的电话号码,qsort(stdlib库函数)将number数组排序,通过检测排序后的number数组得知同一个号码的重复次数,

compare函数用于qsort函数的实现(类似于实现接口)

strandradStr函数用于是电话号码的标准化

源码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char str[20];
char number[10000][9];

//char* elem1 char* elem2
int compare(const void *elem1, const void *elem2)
{
    return(strcmp((char*)elem1, (char*)elem2));
}

void strandradStr(int i)
{
    bool flag = false;
    int j;
    for(j = 0; str[j] != ‘\0‘; j++)
    {
        if(str[j] == ‘-‘)
            flag = true;
        if(str[j]==‘A‘ || str[j]==‘B‘ || str[j]==‘C‘)
            str[j] =  ‘2‘;
        else if(str[j]==‘D‘ || str[j]==‘E‘ || str[j]==‘F‘)
            str[j] =  ‘3‘;
        else if(str[j]==‘G‘ || str[j]==‘H‘ || str[j]==‘I‘)
            str[j] =  ‘4‘;
        else if(str[j]==‘J‘ || str[j]==‘K‘ || str[j]==‘L‘)
            str[j] =  ‘5‘;
        else if(str[j]==‘M‘ || str[j]==‘N‘ || str[j]==‘O‘)
            str[j] =  ‘6‘;
        else if(str[j]==‘P‘ || str[j]==‘R‘ || str[j]==‘S‘)
            str[j] =  ‘7‘;
        else if(str[j]==‘T‘ || str[j]==‘U‘ || str[j]==‘V‘)
            str[j] =  ‘8‘;
        else if(str[j]==‘W‘ || str[j]==‘X‘ || str[j]==‘Y‘)
            str[j] =  ‘9‘;
    }
    int k = 0;
    for(j = 0; str[j] !=‘\0‘ && flag; j++)
    {
        if(str[j] != ‘-‘)
        {
            str[k] = str[j];
            k++;
        }
    }
    if(flag)
        str[k] = ‘\0‘;
    int m;
    for(m = 0; str[m] != ‘\0‘; m++)
        //printf("%s\n", str);
        number[i][m] = str[m];
    str[m] = ‘\0‘;
}

int main()
{
    int n;
    scanf("%d" , &n);
    for(int i = 0; i < n; i++)
    {
        scanf("%s", str);
        //将输入字符串格式化为数字
        //保存在number[i][9]
        strandradStr(i);
    }

//number数组排序
    qsort(number, n, 9, compare);

bool noduplicate = true;
    int i = 0;
    int j = 0;
    while(i<n)
    {
        j = i;
        i++;
        while(i<n && strcmp(number[j],number[i]) == 0)i++;
        if(i - j > 1)
        {
            printf("%s %d\n", number[j], i-j);
            noduplicate = false;
        }
    }
    if(noduplicate)
    {
        printf("No duplicates.\n");
    }
    return 0;
}

时间: 2024-12-22 22:16:20

【蓝桥杯竞赛】例题: 487-3279的相关文章

2015第六届蓝桥杯竞赛感悟

之前对算法一直是敬畏的,觉得很难去学习,但是通过蓝桥杯竞赛也算是强迫自己认真学习了一个多月的算法,发现算法也是可以学的. 前天竞赛就结束了,一直拖到今天才来写一篇总结,其实这次竞赛收货真的蛮大的,自己以前一直不够重视内功的培养,现在能有这么一个机会来修炼内容还是挺开心的. 感觉这次考试题和前两届去比确实难度有所增加,第九题缓存没有写好,第十题压根就没来的及做...其实第十题下来想想是能做的,只是考前最短路径这种动态规划题做的不多,所以在比赛场上就有点怯了...虽然是很想得一等奖参加决赛的,不过照

【蓝桥杯竞赛】玛雅日历

思路是将输入的Haab日历转化为对0.pop 0的天数,按照对应的天数算出Tzolkin历 #include<stdio.h> #include<string.h> // 20*18+5 char Haab[19][10] = {"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "

【蓝桥杯竞赛】细菌繁殖

#include<stdio.h> #include<math.h> int main() { int day_Month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int day_Start, month_Start; int day_End, month_End; int num, n; scanf("%d", &n); for(int i = 0; i < n; i++) {

【蓝桥杯竞赛】 日历问题

#include<stdio.h> //2001 1 1 Saturday char week[7][10] = {"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday","Thursday","Friday"}; int year[2] ={365, 366}; int month[2][12] =

【蓝桥杯竞赛】装箱问题

========================================================================================================== 思路: 6*6 的产品每个会占用一个完整的箱 子,并且没有空余空间: 5*5 的产品每个占用一个新的箱子,并且留下 11 个可以盛放 1*1 的产品的空余空间: 4*4 的产品每个占用一个新的箱子,并且留下 5 个可以盛放 2*2 的产品 的空余空间: 3*3 的产品情况比较复杂,首先

【蓝桥杯竞赛】棋盘上的距离

思路: 将几盘看作二维坐标,始点与终点距离用xDistance yDistance组成,王 后 车 象以不同的的情况考虑. 源码: #include<stdio.h>#include<math.h>int main(){    //测试数据组数    int nGroup = 0;    scanf("%d",&nGroup);    for(int i = 0; i < nGroup; i++)    {        char begin[5]

【蓝桥杯竞赛】校门外的树

问题描述 某校大门外长度为 L 的马路上有一排树,每两棵相邻的树之间的间隔都是 1 米.我们 可以把马路看成一个数轴,马路的一端在数轴 0 的位置,另一端在 L 的位置:数轴上的每 个整数点,即 0,1,2,……,L,都种有一棵树.  由于马路上有一些区域要用来建地铁.这些区域用它们在数轴上的起始点和终止点表示.已 知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分.现在要把这些 区域中的树(包括区域端点处的两棵树)移走.你的任务是计算将这些树都移走后,马路上 还有多少棵树. 

【蓝桥杯竞赛】字串问题

问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能.它们的前几个是:0000000001000100001100100 请按从小到大的顺序输出这32种01串. 输入格式本试题没有输入. 输出格式输出32行,按从小到大的顺序每行一个长度为5的01串.样例输出00000000010001000011<以下部分省略>================================================================================

【蓝桥杯竞赛】 统计字符数

源码 #include<stdio.h>#include<string.h> int main(){    int n;    scanf("%d", &n);    for(int i = 0; i < n; i++)    {        char ch[1001];        int sum[26] = {0};        scanf("%s", ch);        for(int j = 0; j <