登录

在这个站点登录

保存我的登录记录

<<忘记密码?

还没有账号?点此注册>>

Jerry

8.12 给数组中的元素按顺序编号

分享到:

本文已被浏览5078

今天接到某同学求助,写篇新博客解析一下《8.12 给数组中的元素按顺序编号》这道题。

首先,我们先来分析一下题意:先排序,排序后和序号对应:

数[0] 数[1] 数[2] 数[3] 数[4] 数[5] 数[6] 数[7] 数[8] 数[9] 数[…] 数[N-1]

序[0] 序[1] 序[2] 序[3] 序[4] 序[5] 序[6] 序[7] 序[8] 序[9] 序[…] 序[N-1]

然后根据原始数据的顺序输出对应序号

根据上面的说法,我们发现:可以将原始数据备份一下,然后对其进行排序,排序后对应序号,最后用原始数据和排序完的进行比较,相同就输出对应序号,不同就比对下一个

算法为:

Step 0:Input Raw[N]

Step 1:计算Raw的长度L

Step 2:在Line数组的前L个元素中放入1~L

Step 3:将Raw复制为Box

Step 4:冒泡排序Box

Step 5:匹配Box与Line中的元素

Step 6:依次取出Raw中的元素与Box中的元素进行比对如果比对成功,则输出对应位置Line的元素

转为代码:

#include <stdio.h>
int main(){
	//定义变量
	/*Raw是原始数据
	Box用来排序
	Line是序号*/
    int Raw[10],Box[10],Changed,a,b,c,i;
    int Line[10];
    //初始化Line={1,2,3,4,5,6,7,8,9,10}
    for(i=0;i<10;i++){
        Line[i]=i+1;
    }
	//读入Raw的元素
	//好懒的方法O__O "…
    scanf("%d%d%d%d%d%d%d%d%d%d",&Raw[0],&Raw[1],&Raw[2],&Raw[3],&Raw[4],&Raw[5],&Raw[6],&Raw[7],&Raw[8],&Raw[9]);
    //复制数据到Box
	for(i=0;i<10;i++){
        Box[i]=Raw[i];
    }
	/*******************
	冒泡排序
	Changed代表是否有元素位置发生变化
	当无元素位置变化时,说明顺序已经排好
	注:自认为算法不错
	********************/
    for(Changed=1;Changed;b++){
		//预备下一次不用再排了
        Changed=0;
        for(i=0;i<9;i++){
            if(Box[i]>Box[i+1]){
                //换位置
                c=Box[i];
                Box[i]=Box[i+1];
                Box[i+1]=c;
				//位置有变,改变量,需要再次扫描是否需要排序
                Changed=1;
            }
        }
    }
	//要将相同元素的排号统一!!!!!!
	//这个绝对不能少,要考虑到可能会同时出现两个
	//(或多个)第一大而没有第二大(或第二~第X大的数字)
	//相同的数字以较小序号的为准
    for(i=0;i<9;i++){
        if(Box[i]==Box[i+1]){
            Line[i+1]=Line[i];
        }
    }
	//开始比对,如果一样输出最后对应的序号
    for(i=0;i<10;i++){
		//↑取Raw的值
        for(a=0;a<10;a++){
		    //↑取Box的值
            if(Raw[i]==Box[a]){
				//相等说明对上号了,打印!
                printf("%3d",Line[a]);
				//后边的就不用看了,直接比对下一个Raw值
                break;
            }
        }
    }
	//最后输出换行符是过不去的~~无知的程序~~
    printf("n");
    return 0;
}

 

最后贴上一张AC的图:

8.12 AC图
 手机扫描左边的二维码,立刻将文章收入手机!
 微信扫描左边二维码,点击右上角即可分享到朋友圈!
严禁任何非授权的采集与转载,转载须经站长同意并在文章显著位置标注本文连接,站长保留追究法律责任的权利.

评论

 您需要 先登录 才可以回复.