#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.
*/