题解 P1059 【明明的随机数】for-else语句的实现
这题要求去重, 排序, 那么就先暴力
因为算法没啥好讲的所以本篇讲的是一个语法技巧
这里我为了少用一个flag变量所以使用了一个for循环全部结束后运行的方法(相当于python中的
我们知道for循环有三个子表达式, 定义为 for循环时调用,
我们分析 for (expr1; expr2 || expr-else; expr3).
但是我们发现如果expr-else的值是true的话就会继续循环, 我们要保证expr-else的值一定是false, 所以使用逗号表达式, 这个表达式从左到右运算并返回最后一个子句的值, 那么就可以写成如下形式: for (expr1; expr2 || (expr-else, false); expr3), 这就相当于 for (expr1; expr2; expr3) { ... } else { expr-else } 了
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
short n, t, c = 0;
cin >> n;
short *num = new short[n];
while (n--) {
cin >> t;
for (int i = 0; i < c || (num[c++] = t, false); ++i) if (num[i] == t) break;
}
cout << c << endl;
sort(num, num + c);
for (int i = 0; i < c; ++i) cout << num[i] << " ";
return 0;
}