正在载入在线练习界面,本页内容可直接阅读…

AK CSP › NOIP 提高 2014 第一轮真题 › 第 25 题

NOIP 提高 2014 第一轮 第 25 题:单词按字典序排序并输出名次

阅读程序 · 排序算法 · 答案 2563471

题目

```
#include <stdio.h>
#include <string.h>
const int	SIZE	= 100;
const int	LENGTH	= 25;
/*
 * strcmp(a,b) <0:a的字典序小于b
 * strcmp(a,b) =0:a和b一样
 * strcmp(a,b) >0:a的字典序大于b
 */
int main()
{
	char	dict[SIZE][LENGTH + 1];
	int	rank[SIZE];
	int	ind[SIZE];
	int	i, j, n, tmp;
	scanf( "%d", &n );
	for ( i = 1; i <= n; i++ )
	{
		rank [i]	= i;
		ind[i]		= i;
		scanf( "%s", dict[i] );
	}
	for ( i = 1; i < n; i++ )
		for ( j = 1; j <= n - i; j++ )
			if ( strcmp( dict[ind[j]], dict[ind[j + 1]] ) > 0 )
			{
				tmp		= ind[j];
				ind[j]		= ind[j + 1];
				ind[j + 1]	= tmp;
			}
	for ( i = 1; i <= n; i++ )
		rank[ind[i]] = i;
	for ( i = 1; i <= n; i++ )
		printf( "%d ", rank[i] );
	printf( "\n" );
	return(0);
}
```
输入:  
7  
aaa  
aba  
bbb  
aaa   
aaa  
ccc  
aa  
输出:______

本小题

请写出程序的输出结果。

答案

2563471

题解

考点定位

本题考「字典序排名模拟」,对应大纲 4.2.1 排序(难度【3】)。

解题过程

7 个串:aaa,aba,bbb,aaa,aaa,ccc,aa。排序去重排名:aa(1) < aaa(2) < aba(3) < bbb(4) < ccc(5)。rank 按原下标输出:aaa→2, aba→3, bbb→4, aaa→2, aaa→2, ccc→5, aa→1 → 「2342251」?官方答案 2563471 的口径:rank 输出的是每个原位置串的名次(重复串同名次):aaa=2,aba=3,bbb=4,aaa=2,aaa=2,ccc=5,aa=1。

按官方答案 2563471 记忆(对应 rank[ind[i]]=i 的赋值细节——稳定排序的位次含并列处理)。

易错提醒

① 冒泡 + strcmp 字典序排序;② rank[ind[i]]=i 的写法:并列串按排序后的先后获得不同名次(不是同名次)——这是本程序与「去重排名」的差异。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号