找密码

xiaoxiao2021-02-28  3

密码   ZiZi登录各种账号的时候,总是会忘记密码,所以他把密码都记录在一个记事本上。  其中第一个密码就是牛客网的密码。 牛客网专注于程序员的学习、成长及职位发展,连接C端程序员及B端招聘方,通过IT笔试面试题库、 在线社区、在线课程等提高候选人的求职效率,通过在线笔试、 面试及其他工具提升企业的招聘效率。 团队由来自Google、百度、阿里、网易等知名互联网巨头的热血技术青年组成, 用户覆盖全国2000多所高校的100W求职程序员及全部一线互联网企业,并仍在高速增长中。 谨慎的ZiZi当然不会直接把密码记录在上面,而是把上面的字符串经过转化后才是真正的密码。 转化的规则是把字符串以n行锯齿形写出来,然后再按从左到右,从上到下读取, 即为真正的密码。如ABABCADCE以3行写出: 所以真正的密码是ACEBBACAD。但是每一次都要写出来就太麻烦了,您如果能帮他写出一个转换程序, 他就送你一个气球。 输入描述: 第一行一个整数T,表示数据组数 对于每组数据,首先一个正整数n(n<=100,000),然后下一行为一个字符串,字符串长度len<=100,000。 输出描述: 对于每组数据,输出一个字符串,代表真正的密码。 代码. 1.先用string存字符,再输出。 #include<iostream> #include<cstring> using namespace std; string ans[100010]; int main() {     int t,n;     cin>>t;     while(t--)     {          string a;         cin>>n;         cin>>a;         if(n==1)         {             cout<<a<<endl;             continue;         }                     int l=a.length();         int h=0;         int an=1;         for(int i=0;i<l;i++)         ans[i]="";            while(h<l)         {             while(an<n&&h<l)             {                 ans[an++]+=a[h++];             }             while(an>1&&h<l)             {                 ans[an--]+=a[h++];             }         }         for(int i=1;i<=n;i++)         {             cout<<ans[i];             ans[i].clear();         }         cout<<endl;     }     return 0; } 2. 可以找规律,直接输出。 第一 行和最后一行相邻两个字符相隔2 * n - 2,而中间 的行交替相隔2 * (n - i - 1) (i 为第i 行)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include<iostream> #include<cstring> using namespace std; int main() {      int t,n;     string a;     cin>>t;     while(t--)     {         cin>>n;          cin>>a;         if(n==1)         {             cout<<a<<endl;         continue;                        long int l=a.length();               for(int i=0;i<l;i+=2*(n-1))         {             cout<<a[i];         }         for(int i=1;i<n-1;++i)         {             for(int j=i;j<l;j+=(2*n-2))             {                 cout<<a[j];                 if(j+2*(n-1-i)<l) cout<<a[j+2*(n-1-i)];             }           }         for(int i=n-1;i<l;i+=2*(n-1))         {             cout<<a[i];         }         cout<<endl;     }     return 0; }
转载请注明原文地址: https://www.6miu.com/read-2050272.html

最新回复(0)