|
发表于 2017-11-7 08:35:28
|
显示全部楼层
数位相加用递归倒是没有什么问题。
按照规定的序列排序倒是有点烧脑子,代码看着有点繁琐。不过结果在这里:
排序前:
[9, 7, 3, 9, 1, 3, 6, 8, 9]
排序后:
[1, 6, 7, 9, 9, 9, 3, 3, 8]
- # -*- coding: utf-8 -*-
- """
- Created on Mon Nov 6 15:59:02 2017
- """
- import numpy as np
- def numSum(Num):
- NumOfDigitals = int(np.log10(Num))
- numAdd=0;
- for i in range(NumOfDigitals, 0, -1):
- if ( i == NumOfDigitals):
- Digital = int(Num / pow(10, i))
- numAdd=Digital
- remain = Num - Digital*pow(10,i)
- else:
- Digital = int(remain / pow(10, i))
- numAdd += Digital
- remain = remain - Digital*pow(10,i)
-
- return numAdd + remain
- def digitalSum(Num):
- dig_sum = Num
- while(dig_sum > 9):
- dig_sum = numSum(dig_sum)
- return dig_sum
-
- list1 = [684, 6299800, 6041028, 2458660284, 937, 7857867, 384147026736, 888843160862, 270]
- list2 = [1, 6, 7, 4, 9, 3, 2, 5, 8]
- nlist1=[]
- for i in list1:
- nlist1.append(digitalSum(i))
-
- print(nlist1)
- nlist1=[]
- for i in list1:
- dig_sum = digitalSum(i)
- if(len(nlist1)==0):
- nlist1.append(dig_sum)
- else:
- index_j = 0
- flag=0
- order_old = list2.index(nlist1[index_j])
- order_new = list2.index(dig_sum)
- while (order_new > order_old and flag==0): #and index_j<len(nlist1)-1):
- index_j = index_j + 1
- if (index_j < len(nlist1)):
- order_old = list2.index(nlist1[index_j])
- else:
- flag=1
- if (flag==1):
- nlist1.append(dig_sum)
- else:
- nlist1.insert(index_j,dig_sum)
-
- print(nlist1)
复制代码 |
|