信息战(一)——加密程序

信息战(一)——加密程序

1000ms
65536KB
64-bit integer IO format:  %lld      Java class name:  Main
Font Size:   
Type: 
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •                    
  • 在战争时期,各个国家都要保证军队的行动保密性,所以在信息传达时会采取各种加密方法。有一天,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
    

    Source

    一道题跪了一下午,各种细节问题没注意到,首先是数组定义小了,其次循环搞复杂了,最要命的一点是当字母自加大于Z时需要从A从新开始加!

    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<climits>
    using namespace std ;
    const int tt = 1e6 ;
    int main()	{
    	int n , m ;
    	while(cin >> n >> m ) {
    	getchar() ;
    	char s[tt] ;
    	while(cin.getline(s,tt) )	{
    		int len = strlen(s) ;
    		char a[300][300] ;
    		int x , y ;
    		int i = 0 , j = 0 , k = 0 ;
    		for( ; i < len ; i++ )	{
    			if( s[i] >= 'a' && s[i] <= 'z' )
    				s[i] = s[i] - 32 ;
    			if( s[i] >= 'A' && s[i] <= 'Z')	{
    				a[j][k++] = s[i] ;
    				if( k == m )	{
    					j++ ;
    					k = 0 ;
    				}
    			}
    		}
    		int ii = 'A' , t = j ;
    		for(  ; j < n ; j++ )	{
    			if( t != j )
    				k = 0 ;
    			for( ; k < m ; k++ )	{
    				a[j][k] = ii ;
    				ii++ ;
    			}
    		}
    			for( int jj = 0 ; jj < m ; jj++ )
    				for( int kk = 0 ; kk < n ; kk++ )
    					cout << a[kk][jj] ;
    			cout << endl ;
    	}
    	}
    	return 0 ;
    }
    
    
    
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值