一道困扰我的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 展开
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 展开
4个回答
展开全部
1. 加密方法是正确的。
2. 输出格式不符合要求。题目要求输入N个名字之后再一次性输出所有加密后的名字,而程序中是输入一个名字后立即输出一个加密的名字。
3. 建议:一次性读取一个字符串,再用加密函数进行处理。
不知道是不是这个原因。
2. 输出格式不符合要求。题目要求输入N个名字之后再一次性输出所有加密后的名字,而程序中是输入一个名字后立即输出一个加密的名字。
3. 建议:一次性读取一个字符串,再用加密函数进行处理。
不知道是不是这个原因。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
题目要求的是不超过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;
}
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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询