你的例子第一列全是 3,我給個(gè)例子吧:[321, 32, 3, 4],輸出該是 321,32,3,4。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),香河企業(yè)網(wǎng)站建設(shè),香河品牌網(wǎng)站建設(shè),網(wǎng)站定制,香河網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,香河網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
第一個(gè)數(shù)越大,則應(yīng)該排在后面,畢竟 4XXX 是比 3XXX 大的。
setp?1:?[0][1][2]
3??2??1
3??2
3
4
排序第?0?列,越大的排越后。
ret?=?[?,??,??,?4]
setp?2:?[0][1][2]
3??2??1
3??2
3?3?????-?補(bǔ)位?3,因?yàn)?3?是同?3?組第一個(gè)元素。
排序第?1?列,越大的排越后。
ret?=?[?,??,?3,?4]
setp?3:?[0][1][2]
3??2??1
3??2?3??-?補(bǔ)位?3,因?yàn)?3?是同?3?組第一個(gè)元素。
排序第?2?列,越大的排越后。323?比?321?大,所以……
ret?=?[?,?32,?3,?4]
只剩一個(gè),那個(gè)排第一:
ret?=?[321,?32,?3,?4]
以上就是基本思路了。綜上可得:
1. 先按 [0] 列分組:
2. 組中每個(gè)數(shù)都補(bǔ)位到同樣長(zhǎng)度,然后再排序。
完整代碼:
def?joinmin(ls):
groups?=?{}
for?item?in?ls:
prefix?=?item
n?=?0
while?prefix??10:
prefix?//=?10
n?+=?1
groups.setdefault(prefix,?[]).append([item,?n])
sorted_keys?=?list(sorted(groups))
ret?=?0
for?prefix?in?sorted_keys:
items?=?groups[prefix]
max_n?=?max([t[1]?for?t?in?items])
presort_items?=?[]
for?item,?item_n?in?items:
padding?=?item
n?=?item_n
while?max_n??n:
padding?*=?10
padding?+=?prefix
n?+=?1
presort_items.append((padding,?item,?item_n))
for?_,?item,?n?in?sorted(presort_items):
while?n??-1:
ret?*=?10
n?-=?1
ret?+=?item
return?ret
不是看在你的分上答的,不過(guò)這種小題目蠻有趣的。
前兩個(gè)都封裝成了函數(shù)。最后一個(gè)直接運(yùn)行的。沒(méi)有定義函數(shù)。
中間那個(gè)問(wèn)題,是因?yàn)槟阃涀鲱愋娃D(zhuǎn)換,你試著運(yùn)行這個(gè)number=int(number)。應(yīng)該 就對(duì)了。
#include stdio.h
unsigned long combinNum(int m,int n)
{
int i;
unsigned long x=1;
if(n0||nm)return 0;
for(i=m;im-n;i--)
x=x*i/(m+1-i);
return x;
}
void main()
{
int m,n;
scanf("%d%d",m,n);
printf("%ld\n",combinNum(m,n));
}
定義:集合是多個(gè)元素的無(wú)序組合
特點(diǎn):集合類型與數(shù)學(xué)中的集合概念一致,幾何元素之間無(wú)序、每個(gè)元素唯一、不存在相同元素,幾何元素不可更待、不能存在可變數(shù)據(jù)類型。
非可變數(shù)據(jù)類型:整數(shù)、浮點(diǎn)數(shù)、復(fù)數(shù)、字符串類型、元組類型等
表示:{},元素間用,分隔
建立:{} 或者set{},建立空集合必須使用set{}
舉例:
基本操作符:
增強(qiáng)操作符:
實(shí)例:
A-B
{123}
B-A
{'3','1','2'}
AB
{'p','y'}
A|B
{'1','p','2','y','3',123}
A^B
{'2',123,'3','1'}
p123y
A
set()
1.包含關(guān)系比較:
True
False
2.數(shù)據(jù)去重
{'p','y',123}
['p','y',123]
定義:序列是具有先后關(guān)系的一組元素
特點(diǎn):序列是一維元素向量,元素類型可以不同,元素可以相同:類似數(shù)學(xué)元素序列:元素間有序列引導(dǎo),通過(guò)下標(biāo)訪問(wèn)序列的特定元素
序列是一個(gè)基類類型,衍生為:字符串類型、元組類型、列表類型
序號(hào)的定義:正向遞增序號(hào)、反向遞減序號(hào),與字符串中相似。
['.io',123,'python']
'oi.321nohtyp'
序列類型的通用函數(shù)和方法:
3
'y'
定義:元組類型是序列類型的一種擴(kuò)展,一旦創(chuàng)建就不能修改
形式:元組使用()或者tuple()創(chuàng)建,元素之間用逗號(hào)分隔:小括號(hào)使不使用都可以。
舉例:
('cat','dog','tiger','human')
(4352,'bule',('cat','dog','tiger','human'))
元組類型繼承序列類型全部通用操作:操作符、處理函數(shù)、處理方法
元組類型創(chuàng)建后不能修改,因此沒(méi)有特殊操作
('human','tiger',dog','cat')
'tiger'
定義:列表是序列類型的一種擴(kuò)展,創(chuàng)建后其中的元素可以被隨意修改
使用:[]或者list()創(chuàng)建,元素間可以用逗號(hào)隔開,列表中各元素類型可不同,無(wú)長(zhǎng)度限制
['cat','dog','tiger',1024]
['cat','dog','tiger',1024]
列表類型操作函數(shù)及其方法:
['cat',1,2,3,4,'tiger',1024]
修改列表:
練習(xí):
序列:元組和列表兩種重要類型
應(yīng)用場(chǎng)景:元組用于元素不改變的場(chǎng)景,更多用于固定搭配場(chǎng)景:列表更加靈活,它是最常用的序列類型
作用:表達(dá)一組有序數(shù)據(jù)并且處理問(wèn)題;數(shù)據(jù)保護(hù)
元素遍歷:
元組類型:
數(shù)據(jù)保護(hù):不希望數(shù)據(jù)被程序所改變,轉(zhuǎn)換成元組類型
('cat',1,2,3,4,'tiger',1024)
基本統(tǒng)計(jì)值需求:給出一組數(shù)并且理解
定義:總個(gè)數(shù)、求和、平均值、方差、中位數(shù)...
總個(gè)數(shù):len()
求和:for...in
平均值:求和/總個(gè)數(shù)
方差:各數(shù)據(jù)與平均數(shù)差的平方的和的平均數(shù)
中位數(shù):排序,然后... 奇數(shù)找中間一個(gè),偶數(shù)中間兩個(gè)的平均
映射:是一種索引和數(shù)據(jù)的對(duì)應(yīng)關(guān)系,也是鍵和值的對(duì)應(yīng)關(guān)系。
映射類型:由用戶數(shù)據(jù)為定義索引
字典類型:數(shù)據(jù)的組織與表達(dá)的一種新的形態(tài),是映射的體現(xiàn)。
鍵值對(duì):鍵是數(shù)據(jù)索引的擴(kuò)展,字典是鍵值對(duì)的集合,鍵值對(duì)間無(wú)序。
生成:{}和dict()創(chuàng)建,鍵值對(duì)之間用冒號(hào):表示
舉例:{鍵1:值1,鍵2:值2,...,鍵n:值n}
在字典變量中,通過(guò)鍵獲得值:
字典變量={鍵1:值1,...,鍵n:值n}
值=字典變量[鍵]
字典變量[鍵]=值
用[]來(lái)向字典中增加或者索引鍵值對(duì)
舉例:
'北京'
生成空字典:
de={};type(de)
class 'dict'
type(x) 返回變量x的類型
舉例:
True
dict_keys(['中國(guó)','美國(guó)','法國(guó)])
dict_values(['北京','華盛頓','巴黎'])
實(shí)例:
'北京'
'伊斯蘭堡'
('中國(guó)','北京')
練習(xí):
1.映射的表達(dá):映射無(wú)處不在,鍵值對(duì)也無(wú)處不在,統(tǒng)計(jì)數(shù)據(jù)出現(xiàn)的次數(shù),數(shù)據(jù)是鍵,次數(shù)是值。
字典的主要作用:表達(dá)鍵值對(duì)的數(shù)據(jù)進(jìn)而操作他們
2.元素遍歷:
for k in d:
語(yǔ)句塊
定義:jieba庫(kù)是優(yōu)秀的第三方中文分詞庫(kù),需要額外安裝
安裝方法:(cmd命令下)pip install jieba
作用:利用中文詞庫(kù)確定漢字間的關(guān)聯(lián)概率,字間概率大的組成詞組,形成分詞效果,用戶還可以向其中自定義的添加詞組。
分類:精確模式、全模式、搜索引擎模式
精確模式:將詞組精確的分開,不存在冗余單詞
全模式:將所有可能的詞組都掃描出來(lái),有冗余
搜索引擎模式:在精確模式的基礎(chǔ)上,將長(zhǎng)詞再次切分
舉例:
['中國(guó)','是','一個(gè)','偉大','的','國(guó)家']
['中國(guó)','國(guó)是','一個(gè)','偉大','的','國(guó)家']
['中華','華人','人民','共和','共和國(guó)','中華人民共和國(guó)','是','偉大','的']
需求:一篇文章中出現(xiàn)的詞的頻率統(tǒng)計(jì)
分類:英文文本,中文文本
舉例:
英文:哈姆雷特(hamlet)
中文:三國(guó)演義(threekingdoms)
楊輝三角,是二項(xiàng)式系數(shù)在三角形中的一種幾何排列。
前提:每行端點(diǎn)與結(jié)尾的數(shù)為1.
每個(gè)數(shù)等于它上方兩數(shù)之和。
每行數(shù)字左右對(duì)稱,由1開始逐漸變大。
第n行的數(shù)字有n項(xiàng)。
第n行數(shù)字和為2n-1。
第n行的m個(gè)數(shù)可表示為
C(n-1,m-1),即為從n-1個(gè)不同元素中取m-1個(gè)元素的組合數(shù)。
第n行的第m個(gè)數(shù)和第n-m+1個(gè)數(shù)相等
,為組合數(shù)性質(zhì)之一。
每個(gè)數(shù)字等于上一行的左右兩個(gè)數(shù)字之和??捎么诵再|(zhì)寫出整個(gè)楊輝三角。即第n+1行的第i個(gè)數(shù)等于第n行的第i-1個(gè)數(shù)和第i個(gè)數(shù)之和,這也是組合數(shù)的性質(zhì)之一。即
C(n+1,i)=C(n,i)+C(n,i-1)。
(a+b)n的展開式中的各項(xiàng)系數(shù)依次對(duì)應(yīng)楊輝三角的第(n+1)行中的每一項(xiàng)。
將第2n+1行第1個(gè)數(shù),跟第2n+2行第3個(gè)數(shù)、第2n+3行第5個(gè)數(shù)……連成一線,這些數(shù)的和是第4n+1個(gè)斐波那契數(shù);將第2n行第2個(gè)數(shù)(n1),跟第2n-1行第4個(gè)數(shù)、第2n-2行第6個(gè)數(shù)……這些數(shù)之和是第4n-2個(gè)斐波那契數(shù)。
將各行數(shù)字相排列,可得11的n-1(n為行數(shù))次方:1=11^0;
11=11^1;
121=11^2……當(dāng)n5時(shí)會(huì)不符合這一條性質(zhì),此時(shí)應(yīng)把第n行的最右面的數(shù)字”1”放在個(gè)位,然后把左面的一個(gè)數(shù)字的個(gè)位對(duì)齊到十位…
…,以此類推,把空位用“0”補(bǔ)齊,然后把所有的數(shù)加起來(lái),得到的數(shù)正好是11的n-1次方。以n=11為例,第十一行的數(shù)為:1,10,45,120,210,252,210,120,45,10,1,結(jié)果為
25937424601=1110。
完整代碼:
#!/usr/bin/python
#coding=utf-8
#
__author__
=
'cy'
#輸出楊輝三角數(shù)值表
def
triangle(num):
#初始表值為[1]
triangle=[[1]]
#添加i個(gè)值([1])至triangle表,eg:[1]*3,triangle=[[1],
[1],
[1]]
for
i
in
range(2,
num+1):
triangle.append([1]*i)
#改變triangle表的值,eg:
#當(dāng)num=5時(shí),i取5,j取3
#triangle[4][1]
=
triangle[3][1]+triangle[3][0]
#triangle[4][2]
=
triangle[3][2]+triangle[3][1]
#triangle[4][3]
=
triangle[3][3]+triangle[3][2]
#相當(dāng)于triangle表的第4位的值(這里的值為一個(gè)表)的第1,2,3位值等于第3位的值(這里的值也是一個(gè)表)的第1,2,3位值和0,1,2的值分別相加(即錯(cuò)位相加)。
for
j
in
range(1,
i-1):
triangle[i-1][j]
=
triangle[i-2][j]+triangle[i-2][j-1]
return
triangle
#格式化輸出(輸出的是一個(gè)表)
def
printtriangle(triangle,
width):
#列寬
column
=
len(triangle[-1])*width
for
sublist
in
triangle:
result
=
[]
for
contents
in
sublist:
#控制間距
result.append('{0:^{1}}'.format(str(contents),
width))
#控制縮進(jìn),{0:^{1}}:空格在兩邊補(bǔ)齊空位‘^’居中對(duì)齊,‘:’號(hào)后面帶填充的字符
print('{0:^{1}}'.format(''.join(result),
column))
#啟動(dòng)函數(shù)
if
__name__
==
'__main__':
#輸入整數(shù)
num
=
int(input('How
many
rows
do
you
want:'))
#打印信息
"The
triangle
rows
as
follows:"
triangle
=
triangle(num)
#列寬
width
=
len(str(triangle[-1][len(triangle[-1])//2]))+3
printtriangle(triangle,
width)
import math
m = int(input("請(qǐng)輸入第一個(gè)數(shù)字:"))
n = int(input("請(qǐng)輸入第二個(gè)數(shù)字:"))
if m 0 or n 0 or m - n 0:
print("負(fù)數(shù)是沒(méi)有階乘,請(qǐng)重新輸入!")
else:
result = math.factorial(m) / math.factorial(n) / math.factorial(m - n)
print("按照公式C(m, n) = m!/n! /(m - n)!,C({0},{1})的答案為 {2}".format(m, n, result))