getarray.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import math
  2. #获取阶乘列表
  3. def jieChen(n):
  4. myArray = {};
  5. myArray[0] = 1;
  6. i = 1;
  7. while i<n :
  8. myArray[i] = (i+1)*myArray[i-1];
  9. i = i+1
  10. return myArray;
  11. #获取指定数的阶乘
  12. def jieChenNumber(n):
  13. if(n <= 1):
  14. return 1;
  15. return jieChen(n)[n-1];
  16. #辗转相除法进行进制转化
  17. def changeInt2Str(i,m):
  18. if(not isinstance(m,int)):
  19. print("m is not int",m)
  20. return
  21. if(m*i == 0):
  22. return "0";
  23. result = "";i
  24. myarray = {};
  25. while(i>=m):
  26. myarray[myarray.__len__()] = i%m
  27. i=int(i/m)
  28. if(i!=0):
  29. myarray[myarray.__len__()] = i
  30. for item in myarray :
  31. result=str(myarray[item])+result
  32. return result
  33. #获取组合数列表
  34. def getAllArray(m,n):
  35. allArray = {}
  36. max = math.pow(m,n)
  37. index = 0;
  38. while (index < max):
  39. itemIndex = changeInt2Str(index,m)
  40. while(itemIndex.__len__()<n):
  41. itemIndex = "0"+itemIndex
  42. allArray[index]=itemIndex
  43. index = index+1
  44. print(allArray)
  45. return allArray
  46. #获取组合数列表的排列总数
  47. def getAllArrayNumber(m,n):
  48. total = 0
  49. allArray = getAllArray(m,n)
  50. for item in allArray:
  51. total = getitemIndexArrayNumber(allArray[item],m,n)+total
  52. print("total=",total)
  53. return total
  54. #获取单个组合的各边重复项
  55. def getitemIndexArray(itemIndex,m,n):
  56. a = {};
  57. for item in range(m):
  58. index = 0;
  59. indexNum = 0;
  60. while(index < n):
  61. if(itemIndex[index] == str(item)):
  62. indexNum = indexNum + 1
  63. index = index+1
  64. a[item]=indexNum
  65. print("a=",a)
  66. return a
  67. #获取单个组合的各边重复项的排列数
  68. def getitemIndexArrayNumber(itemIndex,m,n):
  69. itemIndexArrayNumber = 0;
  70. a = getitemIndexArray(itemIndex,m,n)
  71. for item in a:
  72. intItem = int(a[item])
  73. if(intItem > 1):
  74. itemIndexArrayNumber = jieChenNumber(intItem)+itemIndexArrayNumber
  75. if(itemIndexArrayNumber == 0):
  76. itemIndexArrayNumber = 1
  77. return itemIndexArrayNumber
  78. # result = changeInt2Str(14,3);
  79. # print(result)
  80. # getAllArray(4,3)
  81. getitemIndexArray("01243",5,5)
  82. # number = getitemIndexArrayNumber("51243",5)
  83. # print(number)
  84. # getAllArrayNumber(4,2)