正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 提高 2014 第一轮真题 › 第 25 题
NOIP 提高 2014 第一轮 第 25 题:单词按字典序排序并输出名次
题目
```
#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号