搞ACM的前来看下,水题,但是WA

vb2010 2009-07-24 02:44:09
题目在这里 杭电的 http://acm.hdu.edu.cn/showproblem.php?pid=2816
确实是水题 但是不知道为什么过不了 呢?

题目:
I Love You Too
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 516 Accepted Submission(s): 335



Problem Description
This is a true story. A man showed his love to a girl,but the girl didn't replied clearly ,just gave him a Morse Code:
****-/*----/----*/****-/****-/*----/---**/*----/****-/*----/-****/***--/****-/*----/----*/**---/-****/**---/**---/***--/--***/****-/ He was so anxious that he asked for help in the Internet and after one day a girl named "Pianyi angel" found the secret of this code. She translate this code as this five steps:
1.First translate the morse code to a number string:4194418141634192622374
2.Second she cut two number as one group 41 94 41 81 41 63 41 92 62 23 74,according to standard Mobile phone can get this alphabet:GZGTGOGXNCS

3.Third she change this alphabet according to the keyboard:QWERTYUIOPASDFGHJKLZXCVBNM = ABCDEFGHIJKLMNOPQRSTUVWXYZ
So ,we can get OTOEOIOUYVL
4.Fourth, divide this alphabet to two parts: OTOEOI and OUYVL, compose again.we will get OOTUOYEVOLI
5.Finally,reverse this alphabet the answer will appear : I LOVE YOU TOO

I guess you might worship Pianyi angel as me,so let's Orz her.
Now,the task is translate the number strings.


Input
A number string each line(length <= 1000). I ensure all input are legal.


Output
An upper alphabet string.


Sample Input
4194418141634192622374
41944181416341926223


Sample Output
ILOVEYOUTOO
VOYEUOOTIO


我的代码:



#include<iostream>
#include<string.h>
#define N 5
#define M 1010
using namespace std;

int main()
{
//定义变量
char num[10][N];
char c[M];
char alp[M],a[M],b[M];
int i,j,k,l,n,m,t;

//数组初始化
memset(c,0,sizeof(c));
memset(alp,0,sizeof(alp));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(num,0,sizeof(num));

//打表(不知道是不是打表O(∩_∩)O~)
num[2][1] = 'A', num[2][2] = 'B', num[2][3] = 'C';
num[3][1] = 'D', num[3][2] = 'E', num[3][3] = 'F';
num[4][1] = 'G', num[4][2] = 'H', num[4][3] = 'I';
num[5][1] = 'J', num[5][2] = 'K', num[5][3] = 'L';
num[6][1] = 'M', num[6][2] = 'N', num[6][3] = 'O';
num[7][1] = 'P', num[7][2] = 'Q', num[7][3] = 'R', num[7][4] = 'S';
num[8][1] = 'T', num[8][2] = 'U', num[8][3] = 'V';
num[9][1] = 'W', num[9][2] = 'X', num[9][3] = 'Y', num[9][4] = 'Z';

//输入数字字符串
while(scanf("%s", &c) != EOF){
l = strlen(c);

//再次初始化
memset(alp,0,sizeof(alp));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));

//转换成标准手机键盘大写字母
for(i = 0; i < l+1 ; i+=2){
alp[i/2] = num[c[i] - '0'][c[i+1] - '0'];
}

//转换成对应的PC键盘字母
j = k = 0;
for(i = 0; i < l/2; i++){
switch(alp[i]){
case 'Q' : alp[i] = 'A'; break;
case 'W' : alp[i] = 'B'; break;
case 'E' : alp[i] = 'C'; break;
case 'R' : alp[i] = 'D'; break;
case 'T' : alp[i] = 'E'; break;
case 'Y' : alp[i] = 'F'; break;
case 'U' : alp[i] = 'G'; break;
case 'I' : alp[i] = 'H'; break;
case 'O' : alp[i] = 'I'; break;
case 'P' : alp[i] = 'J'; break;
case 'A' : alp[i] = 'K'; break;
case 'S' : alp[i] = 'L'; break;
case 'D' : alp[i] = 'M'; break;
case 'F' : alp[i] = 'N'; break;
case 'G' : alp[i] = 'O'; break;
case 'H' : alp[i] = 'P'; break;
case 'J' : alp[i] = 'Q'; break;
case 'K' : alp[i] = 'R'; break;
case 'L' : alp[i] = 'S'; break;
case 'Z' : alp[i] = 'T'; break;
case 'X' : alp[i] = 'U'; break;
case 'C' : alp[i] = 'V'; break;
case 'V' : alp[i] = 'W'; break;
case 'B' : alp[i] = 'X'; break;
case 'N' : alp[i] = 'Y'; break;
case 'M' : alp[i] = 'Z'; break;
default : break;
}
}

//将字符串截成前后两段
j = 0;
l = strlen(alp);
if(l % 2 != 0)
t = l / 2 + 1;
else
t = l / 2;
for(i = 0; i < t; i++){
a[j] = alp[i];
j++;
}
k = 0;
for(i = t; i < l; i++){
b[k] = alp[i];
k++;
}
j = k = 0;

//组合字符串
memset(alp,0,sizeof(alp));
for(i = 0; i < l; i+=2){
alp[i] = a[j];
alp[i + 1] = b[k];
j++;
k++;
}
l = strlen(alp) - 1;

//逆序输出字符串
for(i = l; i >= 0; i--){
printf("%c",alp[i]);
}
printf("\n");
}

//system("pause");
return 0;
}


...全文
231 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
woaiweiyan 2009-08-02
  • 打赏
  • 举报
回复
为什么我这代码AC不了?
#include<stdio.h>
#include<string.h>
int main()
{
char c[1001],alp[1001],a[1001],b[1001];
char num[8][5]={"ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"};
int i,j,k,l,n,m,t;
char s1[27]="QWERTYUIOPASDFGHJKLZXCVBNM",s2[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
while(gets(c))
{
char *p,*q;
memset(alp,0,sizeof(alp));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=0,p=c;*p;p++,i++)
alp[i]=num[*p-'0'-2][*(++p)-'0'-1];
for(i=0;alp[i];i++)
{
for(p=s1,q=s2;;p++,q++)
{
if(*p==alp[i])
{
alp[i]=*q;
break;
}
}
}
l=strlen(alp);
if(l%2!=0) t=l/2+1;
else t=l/2;
j=0;
for(i=0;i<t;i++)
a[j++]=alp[i];
j=0;
for(i=t;i<l;i++)
b[j++]=alp[i];
j=k=0;
memset(alp,0,sizeof(alp));
for(i=0;i<l;i+=2)
{
alp[i]=a[j++];
alp[i+1]=b[k++];
}
strrev(alp);
puts(alp);
}
return 0;
}
密斯刘 2009-08-01
  • 打赏
  • 举报
回复
开始用G++提交的 出错
现在代码没改 用C++酒好了
不知道两者之间存在什么区别
清海风缘 2009-07-27
  • 打赏
  • 举报
回复
路过
ToBeTough 2009-07-27
  • 打赏
  • 举报
回复
感觉可能用multimap<char,string>应该比较简单
dfkjsdhfks 2009-07-26
  • 打赏
  • 举报
回复
mark
十八道胡同 2009-07-25
  • 打赏
  • 举报
回复
纯模拟就可以了
密斯刘 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liao05050075 的回复:]
while(scanf("%s", &c) != EOF)
读字符串的时候不用&,scanf("%s",c)就行了
[/Quote]

糊涂了好久了 谢谢提醒
密斯刘 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hikaliv 的回复:]
纯顶一个吧……
[/Quote]
thank you 我改用C++提交代码就OK了 原来用G++提交的代码
密斯刘 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fz_zhou 的回复:]
E文写的很乱,不要放链接,很多上CSDN的人打不开那些链接的。
[/Quote]
打不开链接??此话怎讲
  • 打赏
  • 举报
回复
看看
liao05050075 2009-07-24
  • 打赏
  • 举报
回复
while(scanf("%s", &c) != EOF)
读字符串的时候不用&,scanf("%s",c)就行了
DarkChampion 2009-07-24
  • 打赏
  • 举报
回复
纯路过
LeonTown 2009-07-24
  • 打赏
  • 举报
回复
mark
beyond071 2009-07-24
  • 打赏
  • 举报
回复
mark 有空再来看
光宇广贞 2009-07-24
  • 打赏
  • 举报
回复
纯顶一个吧……
我不是大明 2009-07-24
  • 打赏
  • 举报
回复
E文写的很乱,不要放链接,很多上CSDN的人打不开那些链接的。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧