某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5×10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

采用sort直接排序,直接略过排序门槛;

  1. //P1097 统计数字
  2. #include<iostream>
  3. #include<algorithm>
  4. using namespace std;
  5. //const int MAX=200001;
  6.  
  7. int main()
  8. {
  9. int i,n,count;
  10. cin>>n;
  11. int *a=new int[n];
  12. for(i=;i<n;i++) cin>>a[i];
  13. sort(a,a+n);
  14.  
  15. for(i=;i<n;i++)
  16. {
  17. count=;
  18. cout<<a[i]<<" ";
  19. while(a[i+]==a[i]) //如果后一位数相同,则统计叠加,否则输出统计结果
  20. {
  21. count++;i++;
  22. }
  23. cout<<count<<endl;
  24. }
  25.  
  26. delete []a;
  27. return ;
  28. }

注:sort(start,end+1,排序方法),start为排序起始地址,而end+1是指实际上是最后一个排序地址的下一个地址(为什么要+1呢?因为这样的设计是整个stl的设计原则决定的,STL的容器在传递迭代器参数时都是传递容器的开始位置,以及容器结尾的下一位置);排序方法默认升序,也可重写,注意返回bool型或int型。

补上快排与堆排序的代码:

  1. void QuickSort(int a[],int left,int right)
  2. {
  3. if(left<right)
  4. {
  5. int i=Division(a,left,right);
  6. QuickSort(a,left,i-);
  7. QuickSort(a,i+,right);
  8. }
  9. }
  10.  
  11. int Division(int a[],int left,int right) //常用的找分界点方法
  12. {
  13. int temp=a[left];
  14. while(left<right)
  15. {
  16. while(left<right&&a[right]>=temp) right--;
  17. a[left]=a[right];
  18. while(left<right&&a[left]<=temp) left++;
  19. a[right]=a[left];
  20. }
  21. a[left]=temp;
  22. return left;
  23. }
  24.  
  25. int Division(int a[],int left,int right) //另一种方式,通过将小于等于基准值的数全部集中到基准点左侧,count值即为最终基准值所在序号
  26. {
  27. int t,temp=a[left];
  28. int count=left;
  29. for(int i=left+;i<=right;i++)
  30. {
  31. if(a[i]<=temp)
  32. {
  33. count++;
  34. t=a[i];
  35. a[i]=a[count];
  36. a[count]=t;
  37. }
  38. }
  39. t=a[left];
  40. a[left]=a[count];
  41. a[count]=t;
  42. return count;
  43.  
  44. }
  45.  
  46. ////////堆排
  47. void HeapSort(int a[],int n)
  48. {
  49. for(int i=n/-;i>=;i--) HeapAdjust(a,i,n);
  50. for(int i=n-;i>;i--)
  51. {
  52. int t=a[];
  53. a[]=a[i];
  54. a[i]=t;
  55. HeapAdjust(a,,i);
  56. }
  57. }
  58.  
  59. void HeapAdjust(int a[],int s,int n)
  60. {
  61. int j,temp;
  62. while(*s+<n)
  63. {
  64. j=*s+;
  65. if((j+<n)&&(a[j+]>a[j])) j++;
  66. if(a[s]<a[j])
  67. {
  68. temp=a[s];
  69. a[s]=a[j];
  70. a[j]=temp;
  71. s=j;
  72. }
  73. else break;
  74. }
  75. }

最简短做法是使用map与set, 一个统计数,一个统计值;

  1. //#include<bits/stdc++.h>
  2. #include<iostream>
  3. #include<map>
  4. #include<set>
  5.  
  6. using namespace std;
  7. int main() {
  8. map <int,int> num;
  9. set <int> a;
  10. int n,i,q;
  11. cin>>n;
  12. for(i=; i<=n; i++) {
  13. cin>>q;
  14. num[q]++;
  15. a.insert(q);
  16. }
  17. for(set<int>::iterator it=a.begin(); it!=a.end(); it++)
  18. cout<<*it<<" "<<num[*it]<<endl;
  19. }

每日一练之排序算法(P1097 统计数字)的更多相关文章

  1. 洛谷 P1097 统计数字

    P1097 统计数字 题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自 ...

  2. java算法:统计数字-将数字转换成字符串,然后使用字符串String.valueOf()方法进行判断

    题目: 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值. 样例 样例 1: 输入: k = 1, n = 1 输出: 1 解释: 在 [0, 1] 中,我们发现 1 出现了 ...

  3. 每日一练之贪心算法(P2587)

    洛谷——P2587 [ZJOI2008]泡泡堂 两队人马进行比赛, 战斗力值各有差异, 如果一方获胜得两分,战平各得一分,失败不得分,求可取得的最佳战绩与最差战绩. 思路:1)最强的打得过最强的就直接 ...

  4. P1097 统计数字

    P1097题库链接:https://www.luogu.org/problem/P1097 难度:普及- 算法标签:模拟,排序,概率论 1.桶模拟 O(n) 得分20 由于题目让统计数出现的次数,并按 ...

  5. [NOIP2007] 提高组 洛谷P1097 统计数字

    题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出 ...

  6. 洛谷—— P1097 统计数字

    https://www.luogu.org/problem/show?pid=1097 题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数 ...

  7. C++算法代码——统计数字

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1109 题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000( ...

  8. 每日一小练——高速Fibonacci数算法

    上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: ...

  9. 【每日算法】排序算法总结(复杂度&amp;稳定性)

    一.插入排序:稳定,时间复杂度O(n^2) 想象你在打扑克牌,一開始左手是空的,接着右手開始从桌上摸牌,并将其插入到左手的一把牌中的正确位置上.为了找到这个正确位置,我们须要从右到左将它与手中的牌比較 ...

随机推荐

  1. mysql的基础用法,水一下

    #和上一篇是一起的,上一篇就是为这个做insert <blockquote>/*思考题*/ create database spj; use spj;create table s( sno ...

  2. Linux下的常用文本编辑器

    Linux的文本编辑器 ed 在早期的unix平台上,ed可以说是唯一的编辑工具.它是一个很古老的行编辑器,vi这些编辑器都是从ed 演化而来.行编辑器使用起来很不方便,每次只能对一行进行操作,.而后 ...

  3. 2018-2019-2 网络对抗技术 20165308 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165308 Exp1 PC平台逆向破解 NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP汇编指令:执行到NOP指令时,CPU仅仅当做一个 ...

  4. JIT(Just in time,即时编译,边运行边编译)、AOT(Ahead Of Time,运行前编译),是两种程序的编译方式

    JIT(Just in time,即时编译,边运行边编译).AOT(Ahead Of Time,运行前编译),是两种程序的编译方式

  5. windows的github教程

    如何向github提交变更1. 在github上面创建project,获得git地址:2. 来到windows,首先安装git:3. 在目标目录下:git clone https://github.c ...

  6. DevExpress Grid使用checkBox选中的方法

    到官网得到消息自13.2版本后的Dev Grid中均内置了CheckBox列多选功能.在寻找答案的过程的成果进行记录. 一.13.2版本以后用法 启用多选列 对Gird中的View进行以下属性设置: ...

  7. maven:Fatal error compiling: 无效的目标 发行版: 1.8 -> [Help 1]

    https://blog.csdn.net/kkgbn/article/details/72777750

  8. Creating Excel files with Python and XlsxWriter——Introduction

    XlsxWriter 是用来写Excel2007版本以上的xlsx文件的Python模块. XlsxWriter 在供选择的可以写Excel的Python模块中有自己的优缺点. #---------- ...

  9. JRockit检测Tomcat内存溢出JAVA内存泄漏问题

    http://blog.csdn.net/liyanhui1001/article/details/8240473 公司的一个Java应用系统上线以来,基本每1天OutOfMemoryError: P ...

  10. Java Swing 界面中文乱码问题解决(Idea环境)

    编译(build)的时候和运行的时候使用同样的字符集就可以了.这里,我都设置为“UTF-8”.具体做当如下: File->Settings->Build...->Compiler,在 ...