一道困扰我的ACM很简单的题,提交了无数次了,为什么总是wrong answer?

如题。http://acm.bnu.edu.cn/contest/problem_show.php?pid=1032这是此题的地址。在VC6.0上通过,不过在OJ上总是w... 如题。

http://acm.bnu.edu.cn/contest/problem_show.php?pid=1032

这是此题的地址。在VC6.0上通过,不过在OJ上总是wrong answer,我总感觉没有理解错题意,但为什么总是wrong answer?求牛人帮忙。

用户名:oneman;

密码:zhimakaimen; 下面是我的代码。不需要提供其他代码,我只想知道我的为什么会错,感激不尽。

#include<stdio.h>

int main()
{
int n,i,j,add;
char str[80],result[80];

scanf("%d",&n);
fflush(stdin);

for(j=1;j<=n;j++)
{

int mark=0;

for(i=0;;i++)
{
if((str[i]=getchar())!=EOF)
{

if(str[i]=='\n')
{
str[i]=0;
break;
}

if(str[i]==32)
{
result[i]=32;
continue;
}

else if(str[i]>='A'&&str[i]<='Z')
{

add=mark*2;
mark++;

result[i]=(str[i]-'A'+add)%26+'A';
}
else if(str[i]>='a'&&str[i]<='z')
{

add=mark*2;
mark++;

result[i]=(str[i]-'a'+add)%26+'a';
}
else
result[i]=str[i];
}
}

result[i]=0;
printf("%s\n",result);
add=0;
}
return 0;
}
Description

Clm高中同桌特别喜欢数学,他的QQ登陆密码是用他的名字经过数学方法加密后得到的字符串,虽然记起来没什么规律,但他对于这种方法乐此不疲。他告诉clm他加密后的字符串,一脸坏笑的问“你知道我是怎样加密的吗?”clm想了一下并没有直接回答,而是用他的加密方法给另一个同学的名字进行了加密,得到了一个新的密码,从而回答了他的问题。
名字:Qin Weize
密码:Qkr Cmsls
名字:Zhao Xiao nan
密码:Zjeu Fsmc dsh
从以上两个例子中学习clm的加密方法对名字进行加密。

Input

第一行输入一个整数n,接下来n行每行是一个名字,只包含大小英文字母和空格,长度不超过80个字符。

Output

对于每个名字,输出一个经过加密的字符串,名字中大写的字母密码中依然大写。

Sample Input
3
Ouyang Wuyou
Hao Rongquan
Li Jinyu

Sample Output
Owcgvq Iiogo
Hcs Xwxseksh
Lk Novig
展开
 我来答
lieyan2024
2010-08-24 · TA获得超过485个赞
知道小有建树答主
回答量:361
采纳率:100%
帮助的人:472万
展开全部
1. 加密方法是正确的。
2. 输出格式不符合要求。题目要求输入N个名字之后再一次性输出所有加密后的名字,而程序中是输入一个名字后立即输出一个加密的名字。
3. 建议:一次性读取一个字符串,再用加密函数进行处理。

不知道是不是这个原因。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
moxsone
2010-08-24 · TA获得超过3332个赞
知道大有可为答主
回答量:2796
采纳率:50%
帮助的人:1499万
展开全部
#include<stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int i = 0,j = 0,n = 0,spc = 0;
char str[25][80];

scanf("%d",&n);
fflush(stdin);

if ( n >= 25 )
{
printf("25个字符串以内");
return 0;
}

for(j=0;j<n;j++)
{
char c = 0;
i = 0;
while ( true )
{
c = getchar();
if ( '\n' == c )
{
str[j][i] = '\0';
break;
}
str[j][i] = c;
i++;
}
}

for ( j = 0 ; j < n ; j++ )
{
i = 0;
spc = 0;
for ( unsigned int i = 0 ; i < strlen(str[j]) ; i++ )
{
int tmpC = str[j][i];
if ( tmpC >= 'a' && tmpC <= 'z' )
{
tmpC += ( i * 2 - spc * 2 );
tmpC = 'a' + ( tmpC - 'a' ) % 26;
}
else if (tmpC >= 'A' && tmpC <= 'Z')
{
tmpC += ( i * 2 - spc * 2 );
tmpC = 'A' + ( tmpC - 'A' ) % 26;
}
else
{
spc++;
}
str[j][i] = (char)tmpC;
}
printf("%s\n",str[j]);
}

fflush(stdin);
getchar();
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e59b677
2010-08-24 · TA获得超过622个赞
知道小有建树答主
回答量:926
采纳率:0%
帮助的人:249万
展开全部
题目要求的是不超过80个字符,所以定义字符串的时候应该是char str[81],result[81];。其他的我觉得不能有什么错吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-08-24
展开全部
#include<stdio.h>

int main()
{
int n,i,j,add;
char str[80],result[80];

scanf("%d",&n);
getchar( ) ; // 吸收掉换行符
for(j=1;j<=n;j++)
{

int mark=0;

for(i=0;;i++)
{
if((str[i]=getchar())!=EOF)
{

if(str[i]=='\n')
{
str[i]=0;
break;
}

if(str[i]==32)
{
result[i]=32;
continue;
}

else if(str[i]>='A'&&str[i]<='Z')
{

add=mark*2;
mark++;

result[i]=(str[i]-'A'+add)%26+'A';
}
else if(str[i]>='a'&&str[i]<='z')
{

add=mark*2;
mark++;

result[i]=(str[i]-'a'+add)%26+'a';
}
else
result[i]=str[i];
}
else // 退出循环
break ;
}

result[i]=0;
printf("%s\n",result);
add=0;
}
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式