哈哈刚刚上完了清明节前最后一节课~放假啦,这么开心来写篇技术博客冷静一下......
这个题目非常简单,但是我就是拿不到满分,后来无奈之下查了网上的满分代码,发现一个神坑啊......
老规矩先上题目链接点击打开链接
咦,粘链接的时候突然意识到如果有没有pat账号的小伙伴是不是不能看题呀......?不知道哎......
哈哈继续上代码,这次我非常乖地写(后加......)了注释!下次不能再忘了......习惯很重要!
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class nums{
public:
int num;
int test1;//记录数字左边部分是否满足条件
nums(int n){
num=n;test1=0;
}
};
int max1=0,min1=1000000000;//如果命名为max和min会出现歧义,用了关键字。
int main(){
int n;
scanf("%d",&n);
vector<nums> ns;//记录输入的数字
for(int i=0;i<n;i++){
int temp1;
scanf("%d",&temp1);
nums temp2(temp1);
if(temp2.num>=max1){//一边输入数字一边计算数字左边部分是否符合条件
temp2.test1=1;
max1=temp2.num;
}
ns.push_back(temp2);
}
vector<int> results;//待排序数组
for(int i=n-1;i>=0;i--){//从右向左遍历看右边部分是否符合条件
nums temp2=ns[i];
if(temp2.num<=min1){
min1=temp2.num;
if(temp2.test1==1){//如果左右都符合条件
results.push_back(temp2.num);
}
}
}
sort(results.begin(),results.end());
printf("%d\n",results.size());
for(int i=0;i<results.size();i++){
printf("%d",results[i]);
if(i+1<results.size()){//输出空格控制
printf(" ");
}
}
if(results.size()==0){//我就不是很懂为什么要输出空行!!!
printf("\n");
}
return 0;
}
这道题好像没有什么要注意的了,调试过程中我出现的错误就是:
1.用了关键字max作为变量名,然后看着报ambiguous的错还一脸无辜地查ambiguous是什么意思......好的这下记住了,歧义。
2.之前是在push_back以后改的temp1的值,而且直接访问的输入变量,这改完没有在vector里留下一片云彩还怎么用.....
除此之外,有个大坑就是,为什么输出0个还要输出一个\n?不能理解呀~总是格式错误格式错误然后我万般无奈下查了满分代码才发现了这个神奇的坑。晓得还有这种操作了。