杭电2019 数列有序!(STL解法)
Posted William_xh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杭电2019 数列有序!(STL解法)相关的知识,希望对你有一定的参考价值。
由于这题对于学过数据结构的我来说,真的是很简单,为了减少时间上的损失,链表无疑是最好的选择(因为数组要往后移位子)。然后,因为最近想玩些STL的骚操作,所以就用<list>了,然后顺便学了下迭代器的用法,其原理其实和指针差不多,就是比指针安全。然后,在a题的过程中发现指针的+—还是有些问题的,所以,就用数值代替了。闲话不多说,奉上ac代码:
#include <iostream> #include<math.h> #include <iomanip> #include<cstdio> #include<string> #include<map> #include<vector> #include<list> #include<algorithm> #include<stdlib.h> #include<iterator> using namespace std; int main() { int n,m; while(cin>>n>>m) { if(n==0&&m==0){ break; } list<int>num; list<int>::iterator p; list<int>::iterator q; list<int>::iterator r,beg,e_d; int ck; for(int i=0;i<n;i++){ cin>>ck; num.push_back(ck); } q=num.begin(); for(p=num.begin();p!=num.end();p++){ if(*p>=m) { q=p; break; } } num.insert(q,m); // beg=num.begin(); // e_d=num.end()--; int daxiao=num.size(); r=num.begin(); for(int i=0;i<daxiao;r++){ if(i<daxiao-1) { cout<<*r<<" "; } else{ cout<<*r; } i++; } cout<<endl; } return 0; }
然后,再奉上用数组写的代码:
#include <iostream> using namespace std; int main() { int n,m,*input_str,flag=-1; while(cin>>n>>m) { //n=0,m=0结束输入 if(n==0&&m==0)break; //为输入的数据分配空间,因为最后要插入一个数,所以分配大小为n+1 input_str=new int[n+1]; for(int i=0; i<n; i++) { cin>>input_str[i]; //flag记住第一次比m大的位置,最后是要把m放在flag这个位置 if(input_str[i]>=m&&flag==-1) { flag=i; } } for(int j=n; j>flag; j--) { //将flag后面的元素都后移1位 input_str[j]=input_str[j-1]; } //将m放入flag位置 input_str[flag]=m; //格式输出 for(int k=0; k<n+1; k++) { if(k==n) cout<<input_str[k]<<endl; else cout<<input_str[k]<<" "; } //重新初始化flag,方便下次使用 flag=-1; delete input_str; } return 0; }
以上是关于杭电2019 数列有序!(STL解法)的主要内容,如果未能解决你的问题,请参考以下文章