一段经典的c 分析7


#include <stdio.h>

//密码
#define PASSWORD "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:/nuwloca-O;m .vpbks,fxntdCeghiry"
//密文
#define CODE "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#/;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l /q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# /){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' /iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c /;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# /}'+}##(!!/"

void ECodingChar(int n);//将一个字符解码
void ECodingWord(char *a,char end);//将一个字符串解码,end是结束字符串的字符
void ECodingByNum(int num,char end);//解码密文中第num个字符串字符串以end结尾

main(int t,int n,char *a)
{
/  -无穷大 -- -71
// int k=0;
 //执行这个case相当于 t和n change,a负值为CODE 所以下面的case用到了这里的地方只要,用这种方法替换就行了
 /*
 if(t<-72)
 {
  main(n,t,CODE);
 }
 */
   -72  --   -49
 //事实上整个这一段都可以不要了,相信我,注释掉吧
 /*
 if(t >= -72 && t < -50)
 {
  ECodingChar(n);
 }
 */

   -50  --   --1
 /*有了ECodingByNum就不要下面这一段了
 if(t<0 && t>=-50)
 {
  //这里是将密文指针移到第t个'/'出,然后从'/'后一个字符开始解码
  //改一下吧,不要用递归调用了
  //main((*a=='/')+t,n,a+1);
  //该成下面的
  while(t<0)
  {
   if(*a == '/') t++;
   a++;
  };
  //出来的时候 t == 0;
 }
 */
///  0
 /*同上,有了ECodingByNum就不要下面这一段了
 if(t == 0)
 {
  ECodingWord(a,'/');
 }
 */
///  1
 if(t == 1)
 {
  main(2,2,"%s");
 }
///  2
///用于输出每一行的第一句
///如On the first day of Christmas my true love gave to me
///  On the second day of Christmas my true love gave to me
/// .......
 if(t == 2)
 {
  //这里的改变有些技巧阿
  /*
  main(-86,0,a+1);
  main(-87,1-n,a);
  main(-79,-13,a);
  */
  //再变一下,我们得到下面的与上面的一一对应
  /*
  main(-86,0,CODE);//输出 On the
  main(-87,1-n,CODE);//输出 first 或者 second 或者 ....
  main(-79,-13,CODE);//输出 day of Christmas my true love gave to me
  */
  ///再变一下
  /*
  main(0,-86,CODE);//输出 On the
  main(1-n,-87,CODE);//输出 first 或者 second 或者 ....
  main(-13,-79,CODE);//输出 day of Christmas my true love gave to me
  */
  //看到了没有, 这种类型的调用用了好多次,把它也变为函数把
  ///再变化如下
  ECodingByNum(0,'/');
  ECodingByNum(1-n,'/');
  ECodingByNum(-13,'/');
 }
//  1 -- +无穷大
 if(1<t)
 {
  if(t<n)
   main(t+1,n,a);
  /*
  main(-94,-27+t,a);
  */
  ///还记得第一个case吗(t<-72)用它的结果来换
  ///main(-27+t,-94,CODE);
  ECodingByNum(-27+t,'/');
  if(/*main(-94,-27+t,a) && */ t == 2 && n<13)
   main(2,n+1,"%s %d %d/n");
 }
}

void ECodingChar(int n)
{
 int i=0;
 char *b = PASSWORD;
 while(1)
 {
  if(n==b[i])
  {
   putchar(b[i+31]);
   break;
  }
  i++;
 }
}
void ECodingWord(char *a,char end)
{
 char * b = a;
 while(*b != end)
 {
  ECodingChar(*b);
  b++;
 }
}
void ECodingByNum(int num,char end)
{
 int i = num;
 char * a= CODE;
 while(i<0)
 {
  if(*a == end) i++;
  a++;
 };
 ECodingWord(a,end);
}
/*原文
On the first day of Christmas my true love gave to me
a partridge in a pear tree.

On the second day of Christmas my true love gave to me
two turtle doves
and a partridge in a pear tree.

On the third day of Christmas my true love gave to me
three french hens, two turtle doves
and a partridge in a pear tree.

On the fourth day of Christmas my true love gave to me
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the fifth day of Christmas my true love gave to me
five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the sixth day of Christmas my true love gave to me
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the seventh day of Christmas my true love gave to me
seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eigth day of Christmas my true love gave to me
eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the ninth day of Christmas my true love gave to me
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the tenth day of Christmas my true love gave to me
ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eleventh day of Christmas my true love gave to me
eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the twelfth day of Christmas my true love gave to me
twelve drummers drumming, eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值