美文网首页
新手赛easy c++ reverse

新手赛easy c++ reverse

作者: 杰_74 | 来源:发表于2019-03-20 13:53 被阅读0次

#easy c++ reverse

原题如下:

#include <iostream>

#include <cstring>

using namespace std;

int main()

{

      cout<<"Welcome to GWHT C++'s classroom!"<<endl;

      cout<<"Now let's play the C++!"<<endl;

     cout<<"Plz Input Your Flag: "<<endl;

     string flag = "";

     cin>>flag;

     int len = flag.length();

     for(int i=0;i<len;i++){

          if(i%2==0){

               flag[i] -= 2;

          }

          else {

          flag[i] -= 7;

              }

     }

     string temp = "";

     for(int i=0;i<3;i++){

          for(int j=0;j<len;j++){

              if((i+j)%3==0){

                    temp += flag[j];

              }

          }

     }

     if(temp == "EM.*wk)vFA]Xs<=PypQ)]$"){

          cout<<"you are good."<<endl;

          }

     else{

          cout<<"keep work up."<<endl;

     }

return 0;

}



Writeup

Flag中数组下标为偶数则减2,奇数则减7,

循环for(int i=0;i<3;i++){

for(int j=0;j<len;j++){

if((i+j)%3==0){

temp += flag[j];

}

}

}把改后flag打乱了拼接在了temp后面。

从temp == "EM.*wk)vFA]Xs<=PypQ)]$"知道改后flag一共有22位,下标从0到21,i有三个,分别为0、1、2,22除于3等于7余1,所以i=0对应8个j,i=1、2对应7个j。因为i+j可以整除3,所以i=0时y=0、3、6、9、12、15、18、21;i=1时y=2、5、8、11、14、17、20;i=2时y=1、4、7、10、13、16、19。

改后flag排好顺序后为"EPFMyA.p]*QXw)sk]<)$=v",这个我一开始是自己排好的顺序,后来写了一个程序重新排序,但还是不如自己排序。

写一个C++的程序跑一下,改后flag下标为偶数加2,奇数加7为原flag。

string a="EPFMyA.p]*QXw)sk]<)$=v";

for(int i=0;i<=21;i++)

{

   if(i%2==0)

   cout<<char(a[i]+2);

   else

   cout<<char(a[i]+7);

}  

                                                                       部分截图

得出flag为GWHT{H0w_1S_y0ur_C++?}

相关文章

网友评论

      本文标题:新手赛easy c++ reverse

      本文链接:https://www.haomeiwen.com/subject/buvymqtx.html