蓝桥杯试题 算法训练 数的统计
2021/12/18 17:21:34
本文主要是介绍蓝桥杯试题 算法训练 数的统计,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。
如序列:3,1,2,1,5,1,2。其中1就出现3次,2出现2次,3出现1 次,5出现1次。
你的任务是对于给定的正整数序列,从小到大依次输出序列中出现的数及出现的次数。
输入格式
第一行正整数n,表示给定序列中正整数的个数。
第二行是n 个用空格隔开的正整数x,代表给定的序列。
输出格式
若干行,每行两个用一个空格隔开的数,第一个是数列中出现的数,第二个是该数在序列中出现的次数。
样例输入
12
8 2 8 2 2 11 1 1 8 1 13 13
样例输出
1 3
2 3
8 3
11 1
13 2
数据规模和约定
数据:n<=1000;0<x<=1000,000。
给大家讲一下这个题的思路,想通了其实还是挺简单的:
首先就是一个含有n个数的数组,它可以有多个相同的数字,要求我们按照数字的大小,从小到大输出这些数字,并且输出该数字出现的次数。
第一我们可以先将这个数组从小到大进行排列,冒泡,选择,插入排序都可以,
为了防止某些同学不会,我讲一下选择排序:
n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:
- 初始状态:无序区为R[1..n],有序区为空;
- 第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;
- n-1趟结束,数组有序化了。
- 代码实现:
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(f[i]>f[j])
{
t=f[i];
f[i]=f[j];
f[j]=t;
}
}
}
排序完成以后,我们可以设置一个两层for循环和设置一个count=1在每次第二个for循环开始后,和选择排序差不多,但是我们在第一层中需要++count
先给大家看一下代码:
#include<stdio.h>
int main()
{
int n,x,j,t,count,i;
int f[1000];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&f[i]);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(f[i]>f[j])
{
t=f[i];
f[i]=f[j];
f[j]=t;
}
}
}
for(i=0;i<n-1;i+=count)//假设我们数组里面有count个1那么我们在f[0],就可以把1有多少个知道,然后直接跳到1后面的数字;
{
count=1;
for(j=i+1;j<n;j++)
{
if(f[i]==f[j])
{
count++;//j从i+1开始,因为已经从小到大排列的,所以如果遇到和f[i]相等的数就count++;
}
}
printf("%d %d",f[i],count);
}
return 0;
}
这篇关于蓝桥杯试题 算法训练 数的统计的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南