hdu 2707 Steganography 模拟题

这个题目就是让你找字符间空格的数量   偶数的为1 奇数为0 然后转化二进制 而后编程10进制 找出对应的符号即可

题目链接

下面就是题目的源代码

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
char a[100000];
char s[2000];
int begin;
void fun(int b,int e){  //二进制转化10进制 并且找出对应的字符
  char tmp[10];
  for(int i=0;i<=4;i++){
    tmp[i]=a[e--];        
  }        
  int sum=0,cheng=1;
  for(int i=0;i<=4;i++){
      if(i==0)cheng=1;
      else cheng=cheng*2;
      if(tmp[i]=='1')sum+=cheng;    
  }
  if(sum==0)printf(" ");
  char alph='A';
  if(sum>=1&&sum<=26)printf("%c",alph+sum-1);
  if(sum==27)printf("'");      
  if(sum==28)printf(",");
  if(sum==29)printf("-");
  if(sum==30)printf(".");
  if(sum==31)printf("?");
}

int main()
{
    while(1){
          begin=1;
          while(gets(s)){
             if(s[0]=='*'){goto ex;}            
             if(s[0]=='#'){goto end;}             
             int len=strlen(s);
             int i=0;
             while(i<len){           //空格数量统计,并且判读奇偶,变成二进制
                if(s[i]!=' ')i++;
                else{
                    int  sum=0;
                     while(s[i++]==' ') {
                        sum++;              
                     }    
                     if(sum%2==0)a[begin++]='1';
                     else a[begin++]='0';
                }                          
             }     
          }             
          ex:;
          begin--;
          while(begin%5!=0){
            a[++begin]='0';                  
          }
          int n=begin/5;
          for(int i=1;i<=n;i++){
             fun(1+(i-1)*5,5*i);        
          }
          printf("\n");
    }
    end:;
    
    return 0;    
}





你可能感兴趣的:(算法)