lzagddsg @ 2022-08-05 15:02:40
本人非牛牛牛,日常刷题刷到此题,尝试半天也无解。好不容易,写出代码,运行发现+-打错。改完bug,再次运行,发现输出许多emoji。
呈上代码,如下所示。恳请各位,看看哪里出错。
#include <bits/stdc++.h>
using namespace std;
int n;
char c[100];
int main()
{
cin >> n >> c;
for (int i = 0; i < sizeof(c); i++)
{
c[i] += n;
if (c[i] > 122)
c[i] -= 25;
cout << c[i];
}
return 0;
}
输入完1(这里是换行符)qwe
后,运行结果:rxf☺☺☺☺☺☺☺☺……(由于cmd版本太低(我电脑出bug了(是真的bug,虫子!)所以暂时借别人的用,我也不好意思截图保存然后上传img啊),无法复制,只好手打,由于太懒,又怕打多了,所以只好省略n个张嘴笑的表情包)
我真的求々你们,告诉我我哪里叒错了,好么?
by xutongwei @ 2022-08-05 15:25:48
@lzagddsg 其实这题 n 不会那么大的……
除了 sizeof 与 strlen 的问题,还有一个问题,就是 c[i] 很容易爆 char ,所以只要先 int zzz = c[i]; ,最后再 c[i] = zzz; 就可以了……
by lzagddsg @ 2022-08-05 15:26:26
@OoXiao_QioO 可以啊
by xutongwei @ 2022-08-05 15:27:25
对了,应该是 c[i] -= 26;
@OoXiao_QioO n 不会去那么大……一次就够了
by lzagddsg @ 2022-08-05 15:30:52
@xiaorui2007 感激不尽,现在代码
#include <bits/stdc++.h>
using namespace std;
int n;
char c[100];
int main()
{
cin >> n >> c;
for (int i = 0; i < strlen(c); i++)
{
c[i] += n;
if (c[i] > 122)
c[i] -= 25;
cout << c[i];
}
return 0;
}
。可惜没AC
by xutongwei @ 2022-08-05 15:41:42
@lzagddsg (没懂你的意思)
比如 'z',n=1 时,'z'+1=123,此时要变为 'a',所以要 -=26,123-26=97,没错啊……
by lzagddsg @ 2022-08-05 15:46:47
@xutongwei 刚刚手滑打错了,就当我没说哈
by lzagddsg @ 2022-08-05 15:47:21
@xiaorui2007 有道理!感激不尽感激不尽
by lzagddsg @ 2022-08-05 15:52:04
@xutongwei 但是似乎在-=25
的时候,输入1(换行符)qwe
(这是题干给的输入),输出的是rxf
啊!当然,在-='z'+1-'a'
的时候也是rxf
。这就很奇妙了,'z'是122,'a'是97,理论上122+1-97就应该是26……(-=26
的时候也是rxf
)
by lzagddsg @ 2022-08-05 15:56:55
@xiaorui2007 但似乎无论是
#include <bits/stdc++.h>
using namespace std;
int n;
char c[100];
int main()
{
cin >> n >> c;
for (int i = 0; i < strlen(c); i++)
{
c[i] += n;
while (c[i] > 122)
c[i] -= 25;
cout << c[i];
}
return 0;
}
还是
#include <bits/stdc++.h>
using namespace std;
int n;
char c[100];
int main()
{
cin >> n >> c;
for (int i = 0; i < strlen(c); i++)
{
c[i] += n;
while (c[i] > 122)
c[i] -= 26;
cout << c[i];
}
return 0;
}
在样例测试阶段都是rxf
,而且最终提交的结果都是PAC并都是3和4错了
by xutongwei @ 2022-08-05 15:57:36
@lzagddsg (???)那是因为这组数据没有用到这个 if 啊