HDU 2019 数列有序!

Time Limit: 1000 MS Memory Limit: 32768 KB

64-bit integer IO format: %I64d , %I64u   Java class name: Main

[Submit] [Status] [Discuss]

Description

有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。

Input

输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。

Output

对于每个测试实例,输出插入新的元素后的数列。

Sample Input

3 3
1 2 4
0 0

Sample Output

1 2 3 4
#include<stdio.h>
#include<stdlib.h>
struct node
{
    int num;
    node *next;
};
int main()
{
    int n,m,i;
    while(scanf("%d%d",&n,&m)!=EOF&&(m!=0||n!=0))
        {
            node * root=(node *)malloc(sizeof(node));    //定义一个头指针 root
            root->next=NULL;
            node *p=root;                  //定义用于连接的指针p
            for(i=1;i<=n;i++)         //依次开辟新空间,存入数据,并且一节一节的连接
            {
                scanf("%d",&p->num);
                node *temp=(node *)malloc(sizeof(node));
                temp->next=NULL;
                p->next=temp;
                p=temp;
            }
            p=root;
            while(p->next!=NULL)        //这里开始插入数字。
            {
                  if(p->next->num>=m)
                  {
                      node *temp=(node *)malloc(sizeof(node));   //为新数字开辟内存。并连接。
                      temp->num=m;
                      temp->next=p->next;                                                                          p->next=temp;
                      break;
                  }
                  p=p->next;
            }

            p=root;
            while(p->next!=NULL)       //输出链表的数据。最后一节的next指针为空。用来结束。
            {
                if(p==root)
                printf("%d",p->num);
                else
                    printf(" %d",p->num);
                p=p->next;
            }
            printf("\n");

    }
    return 0;
}

/*~~~~~~~~~~~~~~~~~~~还不太会链表  不知道自己哪里错了  过几天看~~~~~~~~~~~~~~~~~~~~~~~~~~*/

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

using namespace std;

struct node
{
    node *next;
    int num;
};

int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m),n,m)
    {
        node *root=(node *)malloc(sizeof(node)); ///定义一个头指针 名为root 给node分配一块空间
        node *p=root;   ///表头指针  定义一个链接的指针p  指向分配的空间的开始部位
        root->next=NULL;  ///初始化吧~~~~~~~~~~~~
        for(int i=0; i<n; i++)
        {
            scanf("%d",&p->num);
            node *temp=(node *)malloc(sizeof(node));  ///给temp分配一块空间
            temp->next=NULL;
            p->next=temp;
            p=temp;
        }
        p=root;
        while(p->next!=NULL)
        {
            if(p->next->num>m)
            {
                node *temp=(node *)malloc(sizeof(node)); ///为新数字开辟内存并链接
                temp->num=m;
                temp->next=p->next;
                break;
            }
            p=p->next;
        }
        p=root;
        while(p->next!=NULL)       ///输出链表的数据。最后一节的next指针为空。用来结束。
        {
            if(p==root)
                printf("%d",p->num);
            else
                printf(" %d",p->num);
            p=p->next;
        }
        printf("\n");
    }
    return 0;
}
时间: 2024-10-08 15:19:18

HDU 2019 数列有序!的相关文章

hdu 2019 数列有序!

这是去年用来训练编码能力的一道水题,最近学了链表就重新写了一下这题,对指针不熟悉唉,指来指去,人都晕了 #include<iostream> #include<malloc.h> using namespace std; struct stu { int vaule; stu* next; }; int main() { int n,m; while(cin>>n>>m&&n&&m) { stu *root=(stu*)mal

杭电 2019 数列有序!

http://acm.hdu.edu.cn/showproblem.php?pid=2019 数列有序! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 44844    Accepted Submission(s): 19451 Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给

hdu 2018 数列有序!(java)

问题: 再插入数字时,没有中断循环,导致从输入数处再次循环,如下错误结果: 3 3 1 2 4 1 2 3 3 4 3 1 2 4 5 1 2 3 3 4 当循环完成后记得中断: 数列有序! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 57301    Accepted Submission(s): 24693 Problem De

HDOJ 2019 数列有序!

#include<vector> #include<iostream> #include<algorithm> #include<cstdio> using namespace std; bool cmp(int a, int b) { return a < b; } bool cmp2(int a, int b) { return a > b; } int main() { int n, m; while (cin >> n &am

杭电2019 数列有序!(STL解法)

由于这题对于学过数据结构的我来说,真的是很简单,为了减少时间上的损失,链表无疑是最好的选择(因为数组要往后移位子).然后,因为最近想玩些STL的骚操作,所以就用<list>了,然后顺便学了下迭代器的用法,其原理其实和指针差不多,就是比指针安全.然后,在a题的过程中发现指针的+-还是有些问题的,所以,就用数值代替了.闲话不多说,奉上ac代码: #include <iostream> #include<math.h> #include <iomanip> #in

hdu 2018(母牛问题)2019(数列有序!)2020(绝对值排序 )2021(发工资)2022(海选女主角)

要发现它的规律,题n年牛的总数等于n-1年的母牛数加上第n年新增的母牛数,第n年只有n-3年的那些母牛才能产母牛,所以第n年的母牛数等于第n-1和n-3年的母牛数的和,即sum(n)=sum(n-1)+sum(n-3),可用递归来做 1 #include<cstdio> 2 #include<cmath> 3 #include<string.h> 4 #include<iostream> 5 #include<algorithm> 6 using

hdoj-2019 数列有序!【水】

数列有序! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 59240    Accepted Submission(s): 25564 Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序. Input 输入数据包含多个测试实例

HDU2019 数列有序!

问题链接:HDU2019 数列有序!.入门训练题,用C语言编写程序. 也许对于本题,会考虑用插入排序来做,那就有点绕远了.只要做排序就有可能可能做数据交换,处理时间就长了. 可以考虑输入的n个数据先存放在数组中,再输出. 各种方案中,一边输入数据,一边输出数据,并且在适当位置输出m的做法,应该是优选方案.因为这样做,省去了数组,没有使用额外空间. AC程序如下(正解): /* HDU2019 数列有序! */ #include <stdio.h> int main(void) { int n,

1933: 数列有序!

1933: 数列有序! Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 130  Solved: 50[Submit][Status][Web Board] Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序. Input 输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列.n和m同时为0标示输入数据的结束,本行不做处