zoukankan      html  css  js  c++  java
  • 杭电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;
    }
  • 相关阅读:
    php-基于面向对象的MySQL类
    php-迭代创建级联目录
    php-删除非空目录
    php-递归创建级联目录
    linux 用户管理
    mysql 语法大全
    dos命令下修改mysql密码的方法
    对 linux init.d的理解
    linux 重启服务器命令
    校验软件包
  • 原文地址:https://www.cnblogs.com/William-xh/p/6827798.html
Copyright © 2011-2022 走看看