Poj_1002 487-3279

题目链接:http://poj.org/problem?id=1002

思路:

先对输入字符进行处理,转换为标准形式;插入标准形式的电话号码到查找树中,若有相同号码计数器增加1,再中序遍历查找树。

代码:

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

struct TreeNode;
typedef char ElementType[30];
typedef struct TreeNode *Position;
typedef struct TreeNode *SearchTree;
struct TreeNode
{
    int Count;
    ElementType Element;
    SearchTree Left;
    SearchTree Right;
};

void StrToNum( char *str , char * Tel );
SearchTree MakeEmpty( SearchTree T );
SearchTree Insert( ElementType X, SearchTree T );
void PrintTel( SearchTree T );
int flag = 0;

int main()
{
    int n;
    char Str[100], Tel[100];
    SearchTree T = NULL;

    menset( Tel, 0, sizeof(Tel) );

    scanf( "%d", &n );
    for ( int i = 0; i < n; ++i )
    {
        scanf( "%s", Str );
        StrToNum( Str, Tel );
        T = Insert( Tel, T );
    }

    PrintTel( T );
    if ( flag == 0 )
        printf( "No duplicates.\n" );

    return 0;
}

void PrintTel( SearchTree T )
{
    if ( T != NULL )
    {
        PrintTel( T->Left );
        if ( T->Count > 1 )
        {
            printf( "%s %d\n", T->Element, T->Count );
            flag = 1;
        }
        PrintTel( T->Right );
    }
}

SearchTree MakeEmpty( SearchTree T )
{
    if ( T != NULL )
    {
        MakeEmpty( T->Left );
        MakeEmpty( T->Right );
        free( T );
    }
    return NULL;
}

SearchTree Insert( ElementType X, SearchTree T )
{
    if ( T == NULL )
    {
        T = ( Position )malloc( sizeof( struct TreeNode ) );
        if ( T == NULL )
        {
            printf( "Out of space" );
            return NULL;
        }
        else
        {
            strcpy( T->Element, X );
            T->Left = T->Right = NULL;
        }
    }
    else
    if ( strcmp(X, T->Element) < 0 )
        T->Left = Insert( X, T->Left );
    else
    if ( strcmp(X, T->Element) > 0 )
        T->Right = Insert( X, T->Right);

    return T;
}

void StrToNum( char *str , char * Tel )
{
    int i, j;

    for ( i = j = 0; str[i] != ‘\0‘; i++ )
    {
        if ( str[i] == ‘-‘ );
        else
        if ( ‘0‘ <= str[i] && str[i] <= ‘9‘ )
            Tel[j++] = str[i];
        else
        if ( str[i] < ‘Q‘ )
            Tel[j++] = ( str[i] - ‘A‘ ) / 3 + 2 + ‘0‘;
        else
            Tel[j++] = ( str[i] - ‘A‘ - 1 ) / 3 + 2 + ‘0‘;

        if ( j == 3 )
            Tel[j++] = ‘-‘;
    }
}
时间: 2024-08-07 22:59:55

Poj_1002 487-3279的相关文章

【POJ 3279 Fliptile】开关问题,模拟

题目链接:http://poj.org/problem?id=3279 题意:给定一个n*m的坐标方格,每个位置为黑色或白色.现有如下翻转规则:每翻转一个位置的颜色,与其四连通的位置都会被翻转,但注意只扩散一圈,不是连锁反应. 求最少翻转几个位置能够使所有n*m个位置都变为白色.若有解,求字典序最小的翻转方案(给出每个位置的翻转次数). 数据范围:n, m 属于 [1, 15] 思路:我们把翻转方案中的翻转称为“主动翻转”,翻转过程中受邻居影响而发生的翻转称为“被动翻转”.观察例子可得出如下几个

POJ 3279 Fliptile(DFS+反转)

题目链接:http://poj.org/problem?id=3279 题目大意:有一个n*m的格子,每个格子都有黑白两面(0表示白色,1表示黑色).我们需要把所有的格子都反转成黑色,每反转一个格子,它上下左右的格子都会跟着反转.请求出用最小步数完成反转时每个格子反转的次数.有多个解时,输出字典序最小的一组. 解题思路:只要枚举第一行的2^m种情况,如果一个位置上一行是1,那这个位置一定要反转,因为只有这一行能改变上一行,所以每一行的状态都是由前一行决定的.只要最后判断最后一行是不是都是0即可,

win git error init_cheap-VirtualAlloc pointer is null, Win32 error 487

win git error init_cheap:VirtualAlloc pointer is null, Win32 error 487 标签(空格分隔): git 在idea利用git进行代码更新时遇到的问题,google了一下,早StackOverflow找到解决办法,在此share一下 Error message E:\storm-sql>git pull origin joeywen 0 [main] us 0 init_cheap: VirtualAlloc pointer is

POJ 3279 Fliptile (二进制枚举+模拟)

Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3992   Accepted: 1518 Description Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He has arranged a brainy activity for cows in which

3279 奶牛健美操

3279 奶牛健美操 USACO 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间的小路上奔跑.这些奶牛的路径集合可以被表示成一个点集和一些连接两个顶点的双向路,使得每对点之间恰好有一条简单路径.简单的说来,这些点的布局就是一棵树,且每条边等长,都为1. 对于给定的一个奶牛路径集合,精明的奶牛们会计算出任意点对路径的最大值,我们称之

codevs 3279 奶牛健美操

3279 奶牛健美操   USACO  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond       题目描述 Description Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间的小路上奔跑.这些奶牛的路径集合可以被表示成一个点集和一些连接两个顶点的双向路,使得每对点之间恰好有一条简单路径.简单的说来,这些点的布局就是一棵树,且每条边等长,都为1. 对于给定的一个奶牛路径集合,精明的奶牛们会计算出任意点对路径的最大值,我们称

Git新建仓库时报:Win32 error 487

Git新建仓库时报:Win32 error 487: Couldn't reserve space for cygwin's heap, Win32 error 0 解决方法: 1.进入本地Git安装目录下的bin目录,比如我的是: C:\Users\zhangwwa\AppData\Local\Atlassian\SourceTree\git_local\bin 2.观察是否有rebase.exe和msys-1.0.dll两个文件,如果有,说明进入的目录正确 3.先执行 tasklist /m

ZOJ 3279

线段树单点更新 //============================================================================ // Name : E.cpp // Author : L_Ecry // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================

CODEVS 3279 奶牛的健美操

3279 奶牛健美操 USACO 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间的小路上奔跑.这些奶牛的路径集合可以被表示成一个点集和一些连接两个顶点的双向路,使得每对点之间恰好有一条简单路径.简单的说来,这些点的布局就是一棵树,且每条边等长,都为1. 对于给定的一个奶牛路径集合,精明的奶牛们会计算出任意点对路径的最大值,我们称之为这个路径集合的直径

poj 3279 Fliptile(二进制)

http://poj.org/problem?id=3279 在n*N的矩阵上,0代表白色,1代表黑色,每次选取一个点可以其颜色换过来,即白色变成黑色,黑色变成白色,而且其上下左右的点颜色也要交换,求最少交换多少点能把全部换成颜色0 输出所需要换的点,用1表示,如果有多种方案,输出字典序足最小的方案 但是这题的数据里没有字典序的情况,所以没有比较字典序也可以过,我一开始就不知道这个怎么按字典序排 用二进制枚举第一行所有的情况,第一行的情况确定了,下面的就确定了 1 #include<cstdio