首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

acm1015 请各位喜欢编程大牛帮小弟我看下

2014-01-22 
acm1015 请各位喜欢编程大牛帮我看下题目:在战争时期,各个国家都要保证军队的行动保密性,所以在信息传达时

acm1015 请各位喜欢编程大牛帮我看下
题目:在战争时期,各个国家都要保证军队的行动保密性,所以在信息传达时会采取各种加密方法。有一天,A国安全局成员Oo(也就是传说中的ZSL),发明了一种对指令的加密方法。具体操作如下,取两个正整数X、Y,对于一段明文字符串,将其按行填入一个X行Y列的矩阵中(非字母不填、而且所有字母要求权转换为大写),若未填满,则按字母表顺序顺次填充(’A’…’Z’循环填充)。比如对于X=3,Y=3,明文为”Problem”时,矩阵填充后的结果为:
PRO
BLE
MAB
这样,Oo就得到了一个矩阵,将他按列输出就得到了Oo所要的的密文“PBMRLAOEB”。由于A国编程人员奇缺。所以Oo向你求助,希望你能够帮助他写一个加密程序,从而使得对于任意给定的X、Y以及明文,程序都能输出正确的密文。

Input

第一行X,Y(0 < X <= 200,0 < Y <= 200)。
第二行至末尾每行均为一个明文(保证明文中字母的个数N <= X*Y)。

Output

对于每一行明文输出对应的一行密文。

Sample Input

3 3
Problem
t  e        s t    
l I  156-*/-  S t
u 45/-90 N I v  \908()  8768 *er #!@$&  S a L 

Sample Output

PBMRLAOEB
TTCEADSBE
LTCIADSBE
UVSNEAIRL

各位大牛看看我的算法的额。。。。。。

// 文件加密.cpp : Defines the entry point for the console application.
//

#include"stdio.h"
#include "string.h"
int main(int argc, char* argv[])
{
int k,x,y,i,sum=0,zimu=65;
char str[2000];
char str2[2000];
scanf("%d %d",&x,&y);
getchar();
sum=x*y;
while (gets(str))
{
zimu=65;
for(k=0,i=0;str[i]!='\0';i++)
{
if(str[i]>='A'&&str[i]<='z')
{
if(str[i]>='a')
{
str[i]=str[i]-('a'-'A');
}
str2[k]=str[i];
k++;
}
}
str2[k]='\0';
for(i=strlen(str2);i<=sum;i++,zimu++)
{
if(zimu>'Z')
{
zimu=65;
}
str2[i]=zimu;
}
str2[i]='\0';
//shuchu 
for(i=0;i!=sum-1;i=i+y)
{
if(i>sum-1)
{
i=i-sum+1;
}
printf("%c",str2[i]);
}
printf("%c\n",str2[i]);
}
return 0;
}

[解决办法]

三个回复不能再回复,CSDN太土。我一早就发现问题了,但发不了言,是下面这行的问题:

[code=c]
    while(gets(a))
    {
        i=j=0;
        while((ch=a[i++])!=0)
        {
            if(ch>='a' && ch<='z')
                ch+='A'-'a';
            if(ch>='A' && ch<='Z')
                a[j++]=ch;
        }
        for(i=0;i<r*c;++i)
        {
            k=i%r*c+i/r;
            o[i]=k<j?a[k]:'A'+(k-j)%26;
        }
        // 原来的程序错在这里
        o[i]='\0';// j应该改成i, j是输入串长度的别名,i在这里是r*c, 即矩阵元素个数。
        printf("%s\n",o);
    }
    return 0;
[code]

我试了,一次通过。

热点排行