算法练习 11:比大小

题目描述:

 

 

现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?


 

算法思路分析:

这个我能想到的就只有枚举法和排列组合结合了(如果里面还有更好的方法一定要对话框我!!!)

1、输入序列个数n,依次输入n个由abcdefghijkl乱序组成的序列;

2、从第j个字符开始依次与后面的(j,11)个字符依次进行大小比较如果第j个字符>(j,11)间的字符则,small+=1,而其余的(11-j)个字符;则可以随机排列,即(11-j)!;其实也就是双层循环。

3、这里的问题是abcdefghijkl均是单个的字符无法比较大小,只有数字可以比较大小,所以可以用这几个字符分别对应的ASCII码(ASCII码对应的大小顺序和字符排序一样,这个很重要)来表示他们的大小,python里面有这个求字符ASCII码的函数ord( );

4、最后就是计算了!

代码练习:

#/usr/bin/env.python
# -*- coding:utf-8 -*-
def factorize(num):
    if num==0:
        return 1
    else:
        return num*factorize(num-1)
if __name__ == '__main__':
	n = int(raw_input())
	for i in range(n):
		s = raw_input()
		index = []
		for j in range(12):
			index.append(ord(s[j]))  #字符转换为ASCII码
		out = 1
		for k in range(12):
			small = 0
			for m in range(j,12):
				if index[k] > index[m]:
					small += 1
			out += small * factorize(11 - j)
		print out

基础知识备注:

1、黑板上的排列组合你舍得解开吗?

2、第一次用ASCII转换函数什么感觉:ord(),一万只草泥马奔腾而过!!!!!!;当然也可以用最简单的字典,自己指定大小,eg:     key_list = {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'g': 6, 'h': 7, 'i': 8, 'j': 9, 'k': 10, 'l': 11}

3、当然这里的阶乘也可以调用math包中的求阶乘函数:

import math

math.factorial(11 - j)


---------------------------------------------------------------------------------------------------------------------------

详细内容请关注公众号:目标检测和深度学习

----------------------------------------------------------------------------------------------------------------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

女王の专属领地

您的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值