数列有序!
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 172474 Accepted Submission(s): 69813

Problem 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

Author
lcy

Source
C语言程序设计练习(三)

问题链接:HDU2019 数列有序!
问题简述:(略)
问题分析
  按Markdown格式重写了题解,旧版题解参见参考链接。
  因为输入数据是有序的,也许会考虑用插入排序来做,那就有点绕远了。只要做排序就有可能可能做数据交换,程序速度就慢了。
  读入n个数据存储在数组中,再进行计算输出是可以的,浪费空间。边读入数据边计算输出结果是节省空间的解题方案。
  解法一:输入流处理
  把输入看作数据流,边读入数据边计算输出结果,可以节省空间。
  解法二:插入数据
  读入的数据存储在数组中,然后将m插入到数组的合适位置,最后输出结果。这种做法虽然浪费存储空间,也是一种可行的解题方案。
  这个做法类似于插入排序的局部处理,是常见的处理手法。
程序说明:(略)
参考链接:HDU2019 数列有序!【入门】
题记:(略)

AC的C语言程序(解法一:输入流处理)如下:

/* HDU2019 数列有序! */#include <stdio.h>int main(void)
{int n, m, a, i;while(scanf("%d%d", &n, &m) != EOF && (n || m)) {if(n == 0) printf("%d\n", m); /* n=0时,只需要输出m */else {/* 读入n个数据,同时输出数据,并且在适当位置输出m */int flag = 1;for (i = 1; i <= n; i++) {scanf("%d", &a);if (m < a && flag) {if (i == 1) printf("%d", m);else printf(" %d", m);flag = 0;}if (i > 1 || flag == 0) printf(" ");printf("%d", a);}if (flag) printf(" %d", m); /* m最大 */printf("\n");}}return 0;
}

AC的C语言程序(解法二:插入数据)如下:

/* HDU2019 数列有序! */#include <stdio.h>#define N 100
int a[N + 1];int main(void)
{int n, m, i, j;while(scanf("%d%d", &n, &m) != EOF && (n || m)) {if(n == 0) printf("%d\n", m); /* n=0时,只需要输出m */else {for (i = 0; i < n; i++) scanf("%d", &a[i]);for (i = 0; i < n; i++) if (m < a[i]) break; /* 找到插入位置 */for (j = n; j > i; j--) a[j] = a[j - 1]; /* 后面的数据移动一个位置 */a[i] = m; /* 插入m *//* 输出结果 */for (i = 0; i < n; i++)printf("%d ", a[i]);printf("%d\n", a[n]);}}return 0;
}

HDU2019 数列有序!【入门】相关推荐

  1. HDU2019 数列有序!

    Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序. Input 输入数据包含多个测 ...

  2. HDU2019 数列有序

    数列有序! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  3. hdu2019——数列有序解题报告

    原题: Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序. Input 输入数据包 ...

  4. #6279. 数列分块入门 3(区间修改,查询权值前驱)

    #6279. 数列分块入门 3 这是使用hzwer建议的set写的分块代码,set自动排序,支持二分查找,但是常数较大,比我下面写的用vector实现的分块慢了三倍,空间大了10倍. #include ...

  5. 数列分块入门(套题)(loj6277,loj6278,loj6279,loj6280,loj6281,loj6282,loj6283,loj6284,loj6285)

    前言 zjoi考差了,码一些分块题缓解一下心情 壹 数列分块入门 1[loj6277] 题目大意:区间加,单点查 直接分块,区间加时完全覆盖的块打tag,边界块暴力重构 块大小设为n\sqrt nn​ ...

  6. 数列分块入门 (1 ~ 7)

    分块 6277. 数列分块入门 1 分块思想 我们把每m个元素分成一块,所以我们总共的块数就是n/mn / mn/m块,一般情况下我们取m=nm = \sqrt{n}m=n​.对于区间加操作,我们可以 ...

  7. 「分块」数列分块入门1 – 9

    ACM模板 放暑假了,回归!!! 自己不会写暴力,而且好久没写代码了,于是学学分块的优雅暴力~ 「分块入门-LibreOJ」 「分块」数列分块入门1 – 9 by hzwer 数列简单分块问题实际上有 ...

  8. LOJ——#6277. 数列分块入门 1

    ~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法--分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...

  9. 【分块入门】LOJ 数列分块入门 1 - 9 (学习更新……)

    dl题解 _「分块」数列分块入门1 – 9 by hzwer LOJ #6277. 数列分块入门 1 题意:给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值. 时间限制:100ms 分块 ...

最新文章

  1. ssl charles 参数看不到_SSL证书=安全?小心,别错漏了TA……
  2. windows server backup
  3. java基础_数组常用算法
  4. 图表控件 c++_用C/C++编写16位虚拟内核
  5. 每小时50哈希——看看一个内部员工是如何摧毁整个公司网络的?
  6. Python之旅Day6 模块应用
  7. Storm介绍实际开发注意事项
  8. python为什么不能删除_为什么python不允许我删除文件?
  9. java 应用编程接口_java 应用程序接口(api)是什么
  10. Codeblocks下载安装
  11. 如何更改html的默认应用,win10如何修改默认应用
  12. 远程软件TeamViewer如何导出选项注册表文件?
  13. E-Trunk小实验
  14. httpcanary和fiddler的使用教程
  15. soul显示服务器异常,soul账号状态异常是什么意思?soul账号异常操作多久解封
  16. Transact使用
  17. 矩阵的基础知识回顾:矩阵乘法,矩阵的逆,伴随矩阵,矩阵的转置,行列式,相似矩阵,实对称矩阵
  18. 软件著作权的好处有哪些?软著含金量高吗?
  19. Android7.1 控制背光流程
  20. 无人驾驶数据库汇总(不断更新)

热门文章

  1. 阿群笔记:CentOS7 在线安装 docker 的推荐方法
  2. 英文文档: 如何使用 OpenSSL 创建与吊销数字证书
  3. linux find返回数据不一样,请问一个linux的find的问题,如何让find的返回结果不显示“Perm...
  4. Unity4.3 2D新特性
  5. if shell 条件语句简写_shell中的if语句
  6. linuxsz隐藏文件_linux中rz上传、sz下载命令详解
  7. 【java学习之路】(java SE篇)013.lambda表达式
  8. ajax请求向服务器修改数据,用Jquery实现可编辑表格并用AJAX提交到服务器修改数据...
  9. 行列式算法c语言,新手作品:行列式计算C语言版
  10. linux java bin 安装_linux下安装后缀为bin的Java JDK