一个小学奥数题的python实现(全排列,字符串循环移位,统计元素)
来源:互联网 发布:seo公司usseo 编辑:程序博客网 时间:2024/06/11 19:24
# -*- coding: utf-8 -*-"""Created on Mon Feb 17 13:37:22 2014@author: zhu"""#将1到10填入正五边形的顶点和边,使得每条边三数之和相等,求总数import itertoolsl=[i for i in range(1,11)]ls=list(itertools.permutations(l))#全排列results=[]k=0N=len(ls)rerange=[]for i in range(N): l1=ls[i][0]+ls[i][1]+ls[i][2] l2=ls[i][2]+ls[i][3]+ls[i][4] l3=ls[i][4]+ls[i][5]+ls[i][6] l4=ls[i][6]+ls[i][7]+ls[i][8] l5=ls[i][8]+ls[i][9]+ls[i][0] if l1==l2 and l2==l3 and l3==l4 and l4==l5 and l5==l1: s=[str(ls[i][x]) for x in range(len(ls[i]))] #将符合条件的元组每一个元素(int型)转换成字符 results.append(''.join(s)) #tulpe to strdef str_trans(mystr,ind): # str_loop ,ind means find the position in str new_str=("%s%s"%(mystr[ind:],mystr[0:ind])) # exchange str at ind return new_str for i in range(len(results)): #对每一个元素都进行判断从10开始,方便找出重复 ind=results[i].find('10') nstr=str_trans(results[i],ind) rerange.append(nstr)d={}for x in range(len(rerange)): # count if rerange[x] in d: d[rerange[x]]+=1 else: d[rerange[x]]=1for k in d.keys(): #print print k
原题是:将1到10填入正五边形的顶点和边,使得每条边三数之和相等,求总的个数
思路:1 首先用暴力破解生成1~10的全排列list,对list进行判断,满足条件的存入新的list
2 新list里面可能存在重复的解(因为是首尾相继的,无法判断从哪里开始),选定一个开始的数,将环状字符串切开,对字符串整体进行循环位移,用来判断是否重复
3 位移后的字符串进行计数
0 0
- 一个小学奥数题的python实现(全排列,字符串循环移位,统计元素)
- 字符串全排列-循环移位法
- 字符串全排列:输入一个字符串,打印字符串元素的所有排列
- 求输入字符串的全排列 (无重复元素)
- 算法题/用递归实现一个字符串的全排列
- 编程实现字符串的循环移位操作
- python 全排列的实现
- 全排列的java实现(无重复元素)
- 字符串-字符串的全排列-递归实现
- [字符串] 一个巧妙的字符串循环移位法
- 算法 - 输出一个字符串的全排列(C++)
- 一个很好的字符串全排列算法
- 求一个字符串的全排列
- 获得一个字符串的全排列
- 输出一个字符串的全排列
- 输出一个字符串的全排列
- 实现字符串全排列
- 实现字符串全排列
- 记录,方便以后查询rtl8881a,ecos,cmj-1
- 2014-02-17
- IOS, xib和storyboard的混用
- android异常:The constructor Data() is undefined
- word模板文件损坏批处理
- 一个小学奥数题的python实现(全排列,字符串循环移位,统计元素)
- 如何用CSS让文字居于div的底部
- UML类图基础知识
- Xcode的Architectures和Valid Architectures的区别
- Android4.x 如何处理Power按键
- Struts2和Strtus1.x进行全面的比较
- 数据结构学习笔记5(栈)
- Windows手动添加服务
- Windows Installer 服务不能更新一个或多个受保护的windows文件