| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 945 人关注过本帖, 1 人收藏
标题:第一次做 ACM 题目,runtime error,求指导
只看楼主 加入收藏
lu3664198
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:55
专家分:185
注 册:2014-11-16
结帖率:100%
收藏(1)
 问题点数:0 回复次数:7 
第一次做 ACM 题目,runtime error,求指导
北大ACM题库1002
题目
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
搜索更多相关主题的帖子: 单词 pizza 滑铁卢大学 必胜客 
2014-12-08 13:19
lu3664198
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:55
专家分:185
注 册:2014-11-16
收藏
得分:0 
代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *input(int a);//存储电话号码
char exchange(char i);//字母转换数字
void sort(char *cun_1,int s);//排序
void output(char *chu,int s);
int main()
{
    char *cun;
    int s=0;//电话号码数目
    for(;;)
    {
    scanf("%d",&s);
    if(s<=100000)//电话号码最大数目
        break;
    }
    fflush(stdin);
    cun=input(s);
    sort(cun,s);
    output(cun,s);
}
char exchange(char i)
{
    if(i<68&&i>64)
        i=50;
    if(i<71&&i>67)
        i=51;
    if(i<74&&i>70)
        i=52;
    if(i<77&&i>73)
        i=53;
    if(i<80&&i>76)
        i=54;
    if(i<84&&i>79)
        i=55;
    if(i<87&&i>83)
        i=56;
    if(i<90&&i>86)
        i=57;
    return i;
}   
char *input(int a)
{
    int b,n=3;
    char *cun;//储存电话号码
    cun=(char*)malloc(9*a*sizeof(char));
    for(b=0;b<9*a;b++)
    {
        if(b==n)
        {
            cun[b]='-';
            n+=9;
            continue;
        }
        cun[b]=getchar();
        if(cun[b]=='\n')//字符串结尾
            cun[b]='\0';
        if(cun[b]=='-')//消去"-"
            b--;
        cun[b]=exchange(cun[b]);//转换
    }
    return cun;
}
void sort(char *cun_1,int s)
{
    char (*cun)[9]=(char (*)[9])cun_1;
    char a[9];
    int i,n,b=0;//b确认是否有重复号码
    for (i=0;i<s;i++)
    {
        for (n=0;n<s-i;n++)
        {
            if (strcmp(cun[n],cun[n+1])==0)
            {
                b++;
                continue;
            }
            if (strcmp(cun[n],cun[n+1])>0)
            {
                strcpy(a,cun[n]);
                strcpy(cun[n],cun[n+1]);
                strcpy(cun[n+1],a);
            }
        }
    }
    if (b==0)
    {
        puts("No duplicates");
        exit(0);
    }
}
void output(char *chu,int s)
{
    int i,n=1;
    char (*a)[9]=(char (*)[9])chu;
    for (i=0;i<s-1;i++)
    {
        if(strcmp(a[i],a[i+1])==0)
            n++;
        else
            if(n!=1)
            {
                printf("%s %d\n",a[i],n);
                n=1;
            }
    }
}

wwwwwww...~~;
本人为大一新生,说的不好不要拍我 ~ ( ̄~ ̄) ;
2014-12-08 13:19
lu3664198
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:55
专家分:185
注 册:2014-11-16
收藏
得分:0 
代码我自己都觉得有点乱....(泪)
现在处于自学阶段,数据结构与算法还没详细血...只能靠自己现有的知识去做....
提交时显示 runtime error
vs2012运行成功并且结果正确
求高手指导

wwwwwww...~~;
本人为大一新生,说的不好不要拍我 ~ ( ̄~ ̄) ;
2014-12-08 13:22
ventress
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-12-29
收藏
得分:0 
貌似运行acm会有程序时间长的错误,看acm的百度百科看到的。。。可能是这个。
2014-12-29 16:56
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
超时了,说明你写的程序效率不高,一般竞赛要求都是时间在1s以内

一片落叶掉进了回忆的流年。
2014-12-29 18:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9011
专家分:53957
注 册:2011-1-18
收藏
得分:0 
随手写的,你检查一下

程序代码:
#include <stdio.h>
#include <stdlib.h>

int compare( const void * a, const void * b )
{
    return *(const unsigned*)a - *(const unsigned*)b;
}

int main()
{
    unsigned buf[100000];
    unsigned n;

    scanf( "%u ", &n );
    for( unsigned i=0; i!=n; ++i )
    {
        unsigned phone = 0;

        for( int c; c=getchar(), c!=EOF && c!='\n'; )
            switch( c )
            {
            case '0':
                phone = phone*10 + 0; break;
            case '1':
                phone = phone*10 + 1; break;
            case '2': case 'A': case 'B': case 'C':
                phone = phone*10 + 2; break;
            case '3': case 'D': case 'E': case 'F':
                phone = phone*10 + 3; break;
            case '4': case 'G': case 'H': case 'I':
                phone = phone*10 + 4; break;
            case '5': case 'J': case 'K': case 'L':
                phone = phone*10 + 5; break;
            case '6': case 'M': case 'N': case 'O':
                phone = phone*10 + 6; break;
            case '7': case 'P': case 'R': case 'S':
                phone = phone*10 + 7; break;
            case '8': case 'T': case 'U': case 'V':
                phone = phone*10 + 8; break;
            case '9': case 'W': case 'X': case 'Y':
                phone = phone*10 + 9; break;
            }

        buf[i] = phone;
    }

    qsort( buf, n, sizeof(buf[0]), &compare );

    _Bool flag = 0;
    for( unsigned i=0, diff=1; i!=n-1; ++i )
    {
        if( buf[i] == buf[i+1] )
            ++diff;

        if( (buf[i]!=buf[i+1] || i+1==n-1) && diff!=1 )
        {
            printf( "%03u-%04u %u\n", buf[i]/10000, buf[i]%10000, diff );
            diff = 1;
            flag = 1;
        }
    }
    if( !flag )
        puts( "No duplicates." );

    return 0;
}

2014-12-30 11:08
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
runtime error是运行时错误,你的程序在运行过程中执行了非法的操作,比如fflush(ACM中禁止使用这些函数)。

当然,即使你删了fflush,你的代码也不会AC的。你还在以人机交互的方式理解ACM程序的交互方式。

ACM的题目描述可以看作是一份精确的需求说明,写代码要严格遵守用户的要求格式,不要擅自修改。(尤其当你的用户其实是另一个程序时,它不认识你的提示消息)。

重剑无锋,大巧不工
2014-12-30 18:17
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
楼上说得对,不仅是ACM,任意一种程序设计竞赛都是这样。有时仅仅一个格式变动都不能通过测试。

一片落叶掉进了回忆的流年。
2014-12-30 20:35
快速回复:第一次做 ACM 题目,runtime error,求指导
数据加载中...
 
   



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

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