#李宇春[超话]#
演唱会后遗症之《开过光的优越感》
A:她最近好高兴啊 ,是因为见了我们嘛?
B:肯定是。
C:肯定是!
B:我觉得春春也是人来疯那种型,人越多越开心哈哈哈哈哈嗝
A:她开心我就更开心了~ 哦啦啦[打call][打call]
C:我是让她开心的一份子,虽然我不在现场,我也好开心!!!
D:那你怎么让她开心?
E:不在的不要说话,我们都开过光了,和你不一样(傲娇脸.jpg)
(图源见水印 侵删)
演唱会后遗症之《开过光的优越感》
A:她最近好高兴啊 ,是因为见了我们嘛?
B:肯定是。
C:肯定是!
B:我觉得春春也是人来疯那种型,人越多越开心哈哈哈哈哈嗝
A:她开心我就更开心了~ 哦啦啦[打call][打call]
C:我是让她开心的一份子,虽然我不在现场,我也好开心!!!
D:那你怎么让她开心?
E:不在的不要说话,我们都开过光了,和你不一样(傲娇脸.jpg)
(图源见水印 侵删)
遍历排列的一个简洁的程序算法
以前遍历排列都是用数组,再用循环去加减里面的元素,还得排除重复的。程序比较麻烦,显得比较乱。
最近在搞拉丁方需要遍历排列,思考有不有什么比较优雅一点的算法可以直接得到所有需要的排列呢?
想到一个排列计数1-n!到排列的一个一一对应的简洁的程序算法,这样程序就比较优雅了。
n皇后问题的Python代码:
from math import *
def check(x,n):
for i in range(1,n):
for j in range(i):
if abs(x[i]-x[j]) == i-j:
return i
return 0
def queen(n):
allnum=factorial(n)
num=0
x=[0]*n
# for i in range(allnum):
i=0
while i< allnum:
xx=i
for j in range(n):
yy=factorial(n-1-j)
x[j]=int(xx/yy)
xx=xx%yy
y=list(range(n))
for j in range(n):
x[j]=y.pop(x[j])
j=check(x,n)
if j==0:
num+=1
i+=1
else:
i+=factorial(n-j-1)
print("\r\nn=%d num=%d"%(n,num))
queen(10)
n皇后问题的Julia代码:
#queen.jl
##
# Copyright by yuange 2023.5.30
function check(x,n)
for i in 2:n
for j in 1:i-1
if abs(x[i]-x[j])==(i-j) return i end
end
end
return 0
end
function queen(n)
x=zeros(Int,n)
allnum=factorial(BigInt(n))
num=0
i=0
while i xx=i
for j in 1:n
yy=factorial(BigInt(n-j))
x[j]=div(xx,yy)
xx=xx%yy
end
y=zeros(Int,n)
y[1:n]=1:n
for j in 1:n
x[j]=popat!(y,x[j]+1)
end
j=check(x,n)
if j==0
num+=1
i+=1
else
i+=factorial(BigInt(n-j))
end
end
print("\r\nn=$n,num=$num\r\n")
end
queen(10)
校验算法结果和以下结果没有问题
N皇后问题解的个数
n solution(n)
1 1
2 0
3 0
4 2
5 10
6 4
7 40
8 92
9 352
10724
112680
1214200
1373712
14365596
152279184
1614772512
1795815104
18666090624
194968057848
2039029188884
21314666222712
222691008701644
2324233937684440
24227514171973736
252207893435808352
注意Python和Julia等语言for循环里不接受改变循环变量(还是我没找到方法?),可以用while等代替,这是和C语言系的一个比较大的差异。
for j in range(n):
yy=factorial(n-1-j)
x[j]=int(xx/yy)
xx=xx%yy
y=list(range(n))
for j in range(n):
x[j]=y.pop(x[j])
这段代码一重循环就把排列计数0到n!-1的排列计数xx转换成一个0到n-1的排列数组了。程序只要遍历xx就可以,这样程序一看就结构比较简单。
一般这样的问题,代码要不用递归调用要不就用动态的循环管理。递归调用程序结构简单一些,但是递归调用开销大,其实递归调用本质还是等于多重循环。动态循环管理开销小,但是程序写起来有点乱,程序结构不太好。
这个算法直接排列计数和排列一一对应,程序结构就很简洁。唯一不是太好的地方就是后面的转换如果用数组pop操作代码是简洁,但是这种操作是相对比较耗费时间的。这个后面的用数组pop转换看怎么改用自己的比较简洁的代码。
还好如果不是过分需要效率的时候,这算法就算用数组的pop也还算能接受。
因为大量排列是不符合的,可以x[j]第二项生成就开始就检测,这样会减少很多时间。
这文章主要关注点不是在这里。
以前遍历排列都是用数组,再用循环去加减里面的元素,还得排除重复的。程序比较麻烦,显得比较乱。
最近在搞拉丁方需要遍历排列,思考有不有什么比较优雅一点的算法可以直接得到所有需要的排列呢?
想到一个排列计数1-n!到排列的一个一一对应的简洁的程序算法,这样程序就比较优雅了。
n皇后问题的Python代码:
from math import *
def check(x,n):
for i in range(1,n):
for j in range(i):
if abs(x[i]-x[j]) == i-j:
return i
return 0
def queen(n):
allnum=factorial(n)
num=0
x=[0]*n
# for i in range(allnum):
i=0
while i< allnum:
xx=i
for j in range(n):
yy=factorial(n-1-j)
x[j]=int(xx/yy)
xx=xx%yy
y=list(range(n))
for j in range(n):
x[j]=y.pop(x[j])
j=check(x,n)
if j==0:
num+=1
i+=1
else:
i+=factorial(n-j-1)
print("\r\nn=%d num=%d"%(n,num))
queen(10)
n皇后问题的Julia代码:
#queen.jl
##
# Copyright by yuange 2023.5.30
function check(x,n)
for i in 2:n
for j in 1:i-1
if abs(x[i]-x[j])==(i-j) return i end
end
end
return 0
end
function queen(n)
x=zeros(Int,n)
allnum=factorial(BigInt(n))
num=0
i=0
while i
for j in 1:n
yy=factorial(BigInt(n-j))
x[j]=div(xx,yy)
xx=xx%yy
end
y=zeros(Int,n)
y[1:n]=1:n
for j in 1:n
x[j]=popat!(y,x[j]+1)
end
j=check(x,n)
if j==0
num+=1
i+=1
else
i+=factorial(BigInt(n-j))
end
end
print("\r\nn=$n,num=$num\r\n")
end
queen(10)
校验算法结果和以下结果没有问题
N皇后问题解的个数
n solution(n)
1 1
2 0
3 0
4 2
5 10
6 4
7 40
8 92
9 352
10724
112680
1214200
1373712
14365596
152279184
1614772512
1795815104
18666090624
194968057848
2039029188884
21314666222712
222691008701644
2324233937684440
24227514171973736
252207893435808352
注意Python和Julia等语言for循环里不接受改变循环变量(还是我没找到方法?),可以用while等代替,这是和C语言系的一个比较大的差异。
for j in range(n):
yy=factorial(n-1-j)
x[j]=int(xx/yy)
xx=xx%yy
y=list(range(n))
for j in range(n):
x[j]=y.pop(x[j])
这段代码一重循环就把排列计数0到n!-1的排列计数xx转换成一个0到n-1的排列数组了。程序只要遍历xx就可以,这样程序一看就结构比较简单。
一般这样的问题,代码要不用递归调用要不就用动态的循环管理。递归调用程序结构简单一些,但是递归调用开销大,其实递归调用本质还是等于多重循环。动态循环管理开销小,但是程序写起来有点乱,程序结构不太好。
这个算法直接排列计数和排列一一对应,程序结构就很简洁。唯一不是太好的地方就是后面的转换如果用数组pop操作代码是简洁,但是这种操作是相对比较耗费时间的。这个后面的用数组pop转换看怎么改用自己的比较简洁的代码。
还好如果不是过分需要效率的时候,这算法就算用数组的pop也还算能接受。
因为大量排列是不符合的,可以x[j]第二项生成就开始就检测,这样会减少很多时间。
这文章主要关注点不是在这里。
#法考[超话]##23年商经法每日1题#
第18天 【单选】
某有限责任公司股东甲、乙、丙的持股比例分别为9%、9%和82%。公司未设监事会,乙任监事;丙任执行董事,甲发现丙将公司资产擅自低于市价转让给丙妻,严重损害公司利益。遂书面请求乙对丙提起诉讼。乙碍于情面,未提起诉讼。甲的下列行为中,符合公司法律制度规定的是?
A.以自己的名义对丙提起诉讼,要求其赔偿公司损失
B.提议召开临时股东会,要求丙对相关事项作出说明
C.请求公司以合理价格收购其股权,从而退出公司
D.以公司监督机构失灵、公司和股东利益受到严重损害为由,请求人民法院解散公司
第18天 【单选】
某有限责任公司股东甲、乙、丙的持股比例分别为9%、9%和82%。公司未设监事会,乙任监事;丙任执行董事,甲发现丙将公司资产擅自低于市价转让给丙妻,严重损害公司利益。遂书面请求乙对丙提起诉讼。乙碍于情面,未提起诉讼。甲的下列行为中,符合公司法律制度规定的是?
A.以自己的名义对丙提起诉讼,要求其赔偿公司损失
B.提议召开临时股东会,要求丙对相关事项作出说明
C.请求公司以合理价格收购其股权,从而退出公司
D.以公司监督机构失灵、公司和股东利益受到严重损害为由,请求人民法院解散公司
✋热门推荐