一个小学奥数题的python实现(全排列,字符串循环移位,统计元素)
2014-02-17 15:57
441 查看
# -*- coding: utf-8 -*- """ Created on Mon Feb 17 13:37:22 2014 @author: zhu """ #将1到10填入正五边形的顶点和边,使得每条边三数之和相等,求总数 import itertools l=[i for i in range(1,11)] ls=list(itertools.permutations(l))#全排列 results=[] k=0 N=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 str def 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]]=1 for k in d.keys(): #print print k
原题是:将1到10填入正五边形的顶点和边,使得每条边三数之和相等,求总的个数
思路:1 首先用暴力破解生成1~10的全排列list,对list进行判断,满足条件的存入新的list
2 新list里面可能存在重复的解(因为是首尾相继的,无法判断从哪里开始),选定一个开始的数,将环状字符串切开,对字符串整体进行循环位移,用来判断是否重复
3 位移后的字符串进行计数
相关文章推荐
- 一个python实现翻转字符串的函数
- 字符串左旋--循环移位法(c++实现)
- 面试题---请写出一段Python代码实现删除一个list里面的重复元素
- Java编程实现统计一个字符串中各个字符出现次数的方法
- python3:实现字符串的全排列
- 一个字符串中出现次数最多的字符 统计这个次数【实现代码】
- 编程实现字符串的循环移位操作
- 编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”
- Java中实现统计一个字符串在另一个字符串中出现的次数统计
- Python实现一个Git日志统计分析的小工具
- 请实现一个函数,将一个字符串中的空格替换成“%20”(Python实现)
- 【廖雪峰 python教程 课后题 切片】利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法:
- 统计元素个数+字典存入文件(通过序列化)的python实现
- Python:将一维列表的元素合并为一个字符串
- 任意一个英文的纯文本文件,统计其中的单词出现的个数(shell python 两种语言实现)
- Python简单实现查找一个字符串中最长不重复子串的方法
- Python实现一些简单的算法(4)—将一个字符串转成驼峰数
- python - 列表分组技巧 #写出一段 Python 代码,实现分组一个 list 里面的元素,如 [1,2,3,...100]变成 [[1,2,3],[4,5,6]....]
- mysql自定义函数实现统计一个字符串在另一个长字符串中出现的次数
- JS编写一个函数,实现传入一个不定长度字符串,查找出重复次数前n名的字符并分别统计其次数