为什么第一个样例总是过不去,问题出在哪里啊?

P3742 umi的函数

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


|