杭电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;
}
原文地址:https://www.cnblogs.com/William-xh/p/6827798.html