1.变量尽量定义在全局\
2.你的flag没有必要当x[i] > y[i]时,输出-1然后return 0即可\
3.z数组也没有用,你过程中把y数组的值全部赋给了zs所以最后输出y即可\
AC代码:
```cpp
#include<stdio.h>
#include<string.h>
int main(){
int n,i,flag = 0;
scanf("%d",&n);
char x[n],y[n],z[n];
scanf("%s",x);
scanf("%s",y);
for(i = 0; i < n; i++)
{
if(x[i] < y[i])
{
puts("-1");
return 0;
}
}
printf("%s\n",y);
return 0;
}
```
by _Emiria_ @ 2021-03-01 19:13:18
变量定义到全局有时候不是好事,但是数组尽量在全局定义(否则会导致某个函数栈开销过大),另外数组大小命名不要用变量,可以用 `const` 修饰的常量或者`#define` 一个常数
by feicheng @ 2021-03-01 19:29:49
注意这里加了$SpecialJudge$的标签
所以这题有多个解
如果$x$有一个地方小于$z$就没解
即$if$ $(x_i < z_i)$ 就输出-1并结束
否则$y$本身就是$z$的一个解
不用定义$flag$什么的直接$return$ $0$不香嘛
还有下次定义数组的时候开大点别那么小气
只开到$n$有时候不行因为有时候要补后缀$0$
```cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
char x[105], z[105];
scanf("%s", &x);
scanf("%s", &z);
for (int i = 0; i < n; i++)
{
if (x[i] < z[i])
{
printf("-1");
return 0;
}
}
printf("%s", z);
return 0;
}
```
by __KrNalty__ @ 2021-03-01 19:33:04
$np$啊没刷新刚写完就有俩回复了
orz
早知道不写辽【小声bb】
by __KrNalty__ @ 2021-03-01 19:35:19
@[蒟蒻且网抑fks](/user/287868) 多谢大佬解答,写的很详细,但是我还有一点不明白,虽然我的z数组没用,但是按理说我把y数组的值全部赋给了z,那么我输出z应该也没用问题吧
by 涛子 @ 2021-03-04 09:43:00
@[飞丞](/user/413147) 谢谢大佬,学到了
by 涛子 @ 2021-03-04 09:44:21
@[王子腾0518](/user/386913) 感谢感谢,我没有直接return 0,是因为看翁凯老师的视频说尽量保证单一出口,所以后面改的。
by 涛子 @ 2021-03-04 09:45:54
@[王子腾0518](/user/386913) 哈哈哈,辛苦,非常感谢
by 涛子 @ 2021-03-04 09:46:37