2020-04-28

从大到小或从小到大输出

  1. 把一列数字,由小到大输出
  2. 把一列数字,由大到小输出

问题:
100分的试卷, 木头第一次考了94分
第二次考了67分
第三次考了43分
第四次考了94分
从小到到打印出每次木头的考试成绩。

⭐️✨⭐️ 程序不是一上来就敲代码,先构思你的算法,再去敲代码,并在代码中完善你的算法。

解题思路:
把100分 看成是100个桶,里面装的是相对应的分数,(94号桶里装的就是94分)

首先:初始状态,把这些桶全部设置为0。
考得的分数,就装进相应的桶中。
最后试考完了,把每个桶中考得分数的次数累加
并输出这些分数。

1.这些桶看成是里面有100个桶的一维数组。

(一维数组就是,把一些相同类型的数据排成一组,上面给出的分数数据是整型的,所以这个一维数组定义成int型)

2.定义三个角标
分别用来表示:分数、相同分数出现的次数、桶的编号。

3.把这些分数设置为0,表示还未考得过。

4.从键盘输入考了4次的成绩,存入相应的桶中。

5.计数,对相应编号的桶中放入分数。

6.接下将这些分数按照题目的要求从小到大或者是从大到小打印出来。

#include <stdio.h>
int main(){
	int a[101],i,j,k;   //定义成a[101]:里面存放的是0~100的分数,再定义三个变量,分别是:分数、分数出现的次数,存放分数的桶的编号
	for(i=0;i<=100;i++) 
	a[i]=0;               //把每个分数都设置为0,代表还未考得过。
	
	for(i=1;i<=4;i++)  // 从键盘上输入分数,输入的次数不得超过4次,因为木头就只考了4次
	{
	scanf("%d",&k);    //  把这些分数放进相应的桶中
	a[k]++;           //计数 ,对对应为k的桶中放入一个分数 
	}                //由两条语句构成的复合语句所以要用上花括号 
	
	for(i=100;i>=0;i--) //从大到小输出 的循环语句
	for(j=1;j<=a[i];j++)//相同的分数出现几次就打印几次
	printf("%d\n",i);  //打印分数
	
	return 0; 
	 
}

以上是从大到小的输出

for(i=100;i>=0;i–)

改成
for(i=0;i<=100;i++)
就是从小到大的输出

** 以上算法的核心思想是:好比有101个桶,编号从0到100。每出现一个分数,就放入相应编号的桶中,最后数数每个桶中有几个分数,并打印出来 **

这个算法有个缺点:很浪费空间

要输出1000以内的数,就要申请1001个内存空间,即便我只需要对1000以内中的某6个数进行排序,也得申请1001个空间。

如果在这几个需要排序的数里有小数,哪该怎么办?

这就需要去了解冒泡排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值