| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1407 人关注过本帖
标题:acm487-3279电话号码题目,帮找错
只看楼主 加入收藏
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
结帖率:81.82%
收藏
 问题点数:0 回复次数:7 
acm487-3279电话号码题目,帮找错
程序代码:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"    

typedef struct lnode
{
    char* data;
    long counter;
    struct lnode *next;
}lnode,*linklist;

void changetostande(char*,char*);
void insert(linklist,char * );
---------------------------------------------------------------------------------------------------------------------

int main( )
{
    linklist lodeptr;
    lnode telephonelode;
    int i;
    char telephone[9],input[16];
   
    codelode.data="000-0000";
    codelode.next=0;
    codelode.counter=0;
    lodeptr=&codelode;

    scanf("%d",&i);
    if (i>100000) return 0;
    while (i--)
    {
        scanf("%s",input);//每输入一个字符串
        changetostande(input,telephone);//转换成标准形式***-****
        insert(lodeptr,telephone);//比较后插入。
    }
   
   
    return 0;
}




 
void changetostande(char* input,char* telephone)//处理异常:telephone根本未接受字符,如何解决
{   
   
    int n=0;//n为telephone接收字符的个数
    while (*input != 0)
    {
        if (n==3)//设置telephone[3]='-'
        {
            telephone[3]='-';
            *(telephone++);
            n++;           
        }
        else
        {switch (*input)
            {
        case 'A':
        case 'B':
        case 'C':
        case '2':    ++n;*(telephone++)='2';
            break;
        case 'D':
        case 'E':
        case 'F':
        case '3':    ++n;*(telephone++)='3';
            break;
        case 'G':
        case 'H':
        case 'I':
        case '4':    ++n;*(telephone++)='4';
            break;
        case 'J':
        case 'K':
        case 'L':
        case '5':    ++n;*(telephone++)='5';
            break;
        case 'N':
        case 'M':
        case 'O':
        case '6':    ++n;*(telephone++)='6';
            break;
        case 'P':
        case 'R':
        case 'S':
        case '7':    ++n;*(telephone++)='7';
            break;
        case 'T':
        case 'U':
        case 'V':
        case '8':    ++n;*(telephone++)='8';
            break;
        case 'W':
        case 'X':
        case 'Y':
        case '9':    ++n;*(telephone++)='9';
            break;
        case '0':    ++n;*(telephone++)='0';
            break;
        case '1':   ++n;*(telephone++)='1';
            break;
        default:   
            break;
       
            }//switch
        }//if
        *(input++);
    }//while
    telephone[8]=0;//转换成***-****格式后,设置末尾=0
}


void insert(linklist lodeptr,char *telephone)
{
} 









啧啧,case语句还真怪。
非得改成
case '9':   
++n;
*(telephone++)='9';
break;
难道是每条语句非得占一行

[ 本帖最后由 okayyyy 于 2010-8-19 03:02 编辑 ]
搜索更多相关主题的帖子: 电话号码 
2010-08-19 02:08
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
一塌糊涂:
: error C2065: 'codelode' : undeclared identifier  //没定义
: error C2228: left of '.data' must have class/struct/union type//。。。。。。。。。
: error C2228: left of '.next' must have class/struct/union type//。。。。。。。。。。
: error C2228: left of '.counter' must have class/struct/union type//。。。。。。。。。
: error C2440: '=' : cannot convert from 'int *' to 'struct lnode *' //类型不匹配
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
: error C2018: unknown character '0xa3'//我最恨这种事情,里面竟然隐藏字符,怎么这么没公德心,COPY一下又不侵权
: error C2018: unknown character '0xbb'//同上。
: error C2143: syntax error : missing ';' before '}'


学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-08-19 09:23
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
回复 2楼 do8do8do8
题目有没有啊?Show出来瞅瞅,看有兴趣没???

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-19 09:29
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
程序代码:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"       
typedef struct lnode
{
    char data[9];
    signed long counter;
    struct lnode *next;
}lnode,*linklist;

void changetostande(char*,char*);
void insert(linklist,char* );
int main( )
{
    linklist lodeptr,p;
    lnode codelode;
    long i;
    char t[9],s[256];

   
    strcpy(codelode.data,"000-0000");
    codelode.next=0;
    codelode.counter=-1;
    p=lodeptr=&codelode;
    scanf("%d",&i);
    if (i>100000) return 0;
    while (i--)
    {
        scanf("%s",s);       
        changetostande(s,t);
        printf("%s\n",t);
           
        //insert(lodeptr,t);
    }
    while (p->next)
    {   
        p=p->next;
        printf("%s %d\n",p->data,p->counter);
    }
   
   
    return 0;
}



/*void insert(linklist lodeptr,char *t)
{
   
    }*/
void changetostande(char* s,char* t)
{   
   
    int n=0;
    while (*s && n<8)
    {
        if (n==3)
        {
            *(t++)='-';           
            n++;
            *(s--);
        }
       
        else
        {
        switch (*s)
            {
        case 'A':
        case 'B':
        case 'C':
        case '2':    ++n;
            *(t++)='2';
           
            break;
        case 'D':
        case 'E':
        case 'F':
        case '3':    ++n;
            *(t++)='3';
           
            break;
        case 'G':
        case 'H':
        case 'I':
        case '4':    ++n;
            *(t++)='4';
           
            break;
        case 'J':
        case 'K':
        case 'L':
        case '5':    ++n;
            *(t++)='5';
           
            break;
        case 'N':
        case 'M':
        case 'O':
        case '6':    ++n;
            *(t++)='6';
           
            break;
        case 'P':
        case 'R':
        case 'S':
        case '7':    ++n;
            *(t++)='7';
           
            break;
        case 'T':
        case 'U':
        case 'V':
        case '8':    ++n;
            *(t++)='8';
           
            break;
        case 'W':
        case 'X':
        case 'Y':
        case '9':    ++n;
            *(t++)='9';
           
            break;
        case '0':    ++n;
            *(t++)='0';
           
            break;
        case '1':   ++n;
            *(t++)='1';
           
            break;
        default:   
            break;
       
            }//switch
        }//if
        *(s++);
    }//while
    *t=0;
}










编译通过,呵呵
问题帖没改,所以编译不了
有点麻烦,得看下哈希算法,弄个类似的模型出来才行。
这道题还是适合学完第二章线性表,虽然多个大量数据排序问题。


[ 本帖最后由 okayyyy 于 2010-8-19 10:51 编辑 ]
2010-08-19 10:22
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
题目

487-3279
Time Limit: 2000MS  Memory Limit: 65536K
Total Submissions: 140008  Accepted: 23842

Description

企业喜欢用容易被记住的电话号码。让电话号码容易被记住的一个办法是将它写成一个容易记住的单词或者短语。例如,你需要给滑铁卢大学打电话时,可以拨打TUT-GLOP。有时,只将电话号码中部分数字拼写成单词。当你晚上回到酒店,可以通过拨打310-GINO来向Gino's订一份pizza。让电话号码容易被记住的另一个办法是以一种好记的方式对号码的数字进行分组。通过拨打必胜客的“三个十”号码3-10-10-10,你可以从他们那里订pizza。

电话号码的标准格式是七位十进制数,并在第三、第四位数字之间有一个连接符。电话拨号盘提供了从字母到数字的映射,映射关系如下:
A, B, 和C 映射到 2
D, E, 和F 映射到 3
G, H, 和I 映射到 4
J, K, 和L 映射到 5
M, N, 和O 映射到 6
P, R, 和S 映射到 7
T, U, 和V 映射到 8
W, X, 和Y 映射到 9

Q和Z没有映射到任何数字,连字符不需要拨号,可以任意添加和删除。 TUT-GLOP的标准格式是888-4567,310-GINO的标准格式是310-4466,3-10-10-10的标准格式是310-1010。

如果两个号码有相同的标准格式,那么他们就是等同的(相同的拨号)

你的公司正在为本地的公司编写一个电话号码薄。作为质量控制的一部分,你想要检查是否有两个和多个公司拥有相同的电话号码。

Input

输入的格式是,第一行是一个正整数,指定电话号码薄中号码的数量(最多100000)。余下的每行是一个电话号码。每个电话号码由数字,大写字母(除了Q和Z)以及连接符组成。每个电话号码中只会刚好有7个数字或者字母。
Output

对于每个出现重复的号码产生一行输出,输出是号码的标准格式紧跟一个空格然后是它的重复次数。如果存在多个重复的号码,则按照号码的字典升序输出。如果输入数据中没有重复的号码,输出一行:
No duplicates.

Sample Input

12
4873279
ITS-EASY
888-4567
3-10-10-10
888-GLOP
TUT-GLOP
967-11-11
310-GINO
F101010
888-1200
-4-8-7-3-2-7-9-
487-3279

Sample Output

310-1010 2
487-3279 4
888-4567 3




[ 本帖最后由 okayyyy 于 2010-8-19 11:14 编辑 ]
2010-08-19 10:25
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
我的话,我会选择开数组,而不是写大段的switch case,御坂解释道

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-08-19 13:05
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
开个大数组,读的时候把英文字母转换成数字,-去掉,然后拍下序,遍历一遍,over
2010-08-19 14:25
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
说的也是。
但我一开始就只想到开关。
深受其害,你们看看那些WINDOWS  c窗口程序。都是一堆开关

[ 本帖最后由 okayyyy 于 2010-8-19 17:38 编辑 ]
2010-08-19 17:32
快速回复:acm487-3279电话号码题目,帮找错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.066988 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved