问题标题: 酷町堂:1791 ,密码升级战

0
0
已解决
王睿卿
王睿卿
高级守护
高级守护

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
 string a;
 getline(cin,a);
 for(int i=0;i<5;i++)
 {
  if(a[i]<='z'&&a[i]>='a'||a[i]<='Z'&&a[i]>='A')
  {
   if(a[i]=='A'||a[i]=='a'||a[i]=='B'||a[i]=='b')
   {
    a[i]+=24;
   }
   else
   {
    a[i]-=2;
   }
  }
  cout<<char(a[i]);
 }
 for(int i=5;i<10;i++)
 {
  if(a[i]<='z'&&a[i]>='a'||a[i]<='Z'&&a[i]>='A')
  {
   if(a[i]=='y'||a[i]=='z'||a[i]=='Y'||a[i]=='Z')
   {
    a[i]-=24;
   }
   else
   {
    a[i]+=2;
   }
  }
  cout<<char(a[i]);
 }
 for(int i=10;i<a.size();i++)
 {
  if(a[i]<='z'&&a[i]>='a'||a[i]<='Z'&&a[i]>='A')
  {
   if(a[i]=='A'||a[i]=='a')
   {
    a[i]+=25;
   }
   else
   {
    a[i]-=1;
   }
  }
  cout<<char(a[i]);
 }
 return 0;
}


0
已采纳
毕小曼
毕小曼
初级光能
初级光能

王睿卿,其实不需要用三个循环,用一个循环判断就行了。

for(int i=0;i<a.size;i++)

{
    if(......)

}

三个大判断,六个小判断。

输出的时候不需要强制类型转换

0
翟谦瑞
翟谦瑞
新手守护
新手守护
 if(a[i]<='z'&&a[i]>='a'||a[i]<='Z'&&a[i]>='A')
  {
   if(a[i]=='A'||a[i]=='a'||a[i]=='B'||a[i]=='b')
   {
    a[i]+=24;
   }

啥玩意?判断是字母?

a[i]本来就是一个字母,如:

if(a[i]>='C'&&a[i]<='Z'||a[i]>='c'&&a[i]<='z')a[i]-=2;
else if(a[i]=='A'||a[i]=='B'||a[i]=='a'||a[i]=='b')a[i]+=24;    

另外两个也一样。

翟谦瑞在2018-03-31 08:10:49追加了内容

补充一下:后面直接输出,不要强制类型转换。

翟谦瑞在2018-03-31 08:21:07追加了内容

你的循环用的太多了!!

0
夏修雯
夏修雯
新手守护
新手守护

可以参考如下代码。

循环(int i=0; i<=min(4,l); i++)//第一部分判断并替换
    {
        if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
        {
            if(s[i]=='B') cout<<'Z';
            else if(s[i]=='b') cout<<'z';
            else if(s[i]=='a') cout<<'y';
            else if(s[i]=='A') cout<<'Y';
            else cout<<char(s[i]-2);
        }
        else cout<<s[i];
    }
   循环(int i=5; i<=min(9,l); i++)//第二部分判断并替换
    {
        if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
        {
            if(s[i]=='Z') cout<<'B';
            else if(s[i]=='z') cout<<'b';
            else if(s[i]=='y') cout<<'a';
            else if(s[i]=='Y') cout<<'A';
            else cout<<char(s[i]+2);
        }
        else cout<<s[i];
    }
    循环(int i=10; i<=l; i++)//第三部分判断并替换
    {
        if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
        {
            if(s[i]=='A') cout<<'Z';
            else if(s[i]=='a') cout<<'z';
            else cout<<char(s[i]-1);
        }
        else cout<<s[i];
    }

模拟一遍就行了。

0
我要回答