排序
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝最近学习了一些排序算法,其中冒泡排序让他印象深刻。
在冒泡排序中,每次只能交换相邻的两个元素。
小蓝发现,如果对一个字符串中的字符排序,只允许交换相邻的两个字符, 则在所有可能的排序方案中,冒泡排序的总交换次数是最少的。
例如,对于字符串 lanlan 排序,只需要 11 次交换。对于字符串 qiaoqiao 排序,总共需要 44 次交换。
小蓝找到了很多字符串试图排序,他恰巧碰到一个字符串,需要 100100 次交 换,可是他忘了吧这个字符串记下来,现在找不到了。
请帮助小蓝找一个只包含小写英文字母且没有字母重复出现的字符串,对 该串的字符排序,正好需要 100100 次交换。如果可能找到多个,请告诉小蓝最短的那个。如果最短的仍然有多个,请告诉小蓝字典序最小的那个。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
#include<stdio.h> #define _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_DEPRECATE #pragma warning(disable:4996); //n=15时,105; int main() { //通过代码可知,当字符个数是15时,最多交换105次,当为14时,交换90+(忘了多少了)所以当交换100此时,最少15个字符。 //所以将a-o完全逆序后,让105次少5次,所以这少的5次是在onmlk向前交换时由于少了j而少交换的次数。(之前想错了(-"-怒)!) return 0; }
字典序:按照字母顺序,或者数字小大顺序,由小到大的形成序列。比如说有一个随机变量X包含{1 2 3}三个数值。
其字典排序就是{} {1} {1 2} {1 2 3} {2} {2 3} {3} //我理解的是先叫第一位大小,再一次往后比较。
冒泡排序的比较次数(最多):例如n=5是,i=1 时4
i=2 3
i=3 2
i=4 1
即为等差数列公式10
所以当n=15 和为n* (n-1)/2=105;
浙公网安备 33010602011771号