給定一組數字或符號 , 產生所有可能的集合(包括空集合 ), 例如給定1 2 3 , 則可能的集合為 :
{}、、、、、、、。
如果不考慮字典順序,則有個簡單的方法可以產生所有的集合,思考二進位數字加法,並注意1出現的位置,如果每個位置都對應乙個數字,則由1所對應的數字所產生的就是乙個集合,例
如000 {}
001
010
011
100
101
110
111
了解這個方法之後,剩下的就是如何產生二進位數?有許多方法可以使用,您可以使用unsigned型別加上&位元運算來產生,這邊則是使用陣列搜 尋,首先陣列內容全為0,找第乙個1,在還
沒找到之前將走訪過的內容變為0,而第乙個找到的0則變為 1,如此重複直到所有的陣列元素
都變為1為止,例如:
0 000 > => 0 100 > => 0 010 > => 0 110 > => 1 001 > => 1 101 > => 1 011 > => 111
#include
#include
#define n 10
int main()
");//空集
printf("\n");
//產生二進位制數
while (1)
printf("}\n");
}system("pause");
return
0;}
如果有n個元素要產生可能的集合,當依序產生集合時,如果最後乙個元素是n,而
倒數第二個元素是m的話,例如:
則下乙個集合就是,再依序加入後續的元素。
拿來說:
(1){},尾數不是4,加1,,尾數不是4,加1,,同理,。
(2)尾數為4,下乙個集合為,即,維數為4,下乙個集合為即,尾數不是4,進行第一步,,為4進行第二步,>>>>>><<<<<<<<,當第乙個數為4,時退出
# -*- coding: utf-8 -*-
"""created on thu nov 23 10:23:48 2017
@author: yangwenbin
"""import numpy as np
if __name__=="__main__":
#print("請輸入集合數:")
num=int(input("請輸入集合數:"))
digit=np.zeros(num)
p=0digit[0]=1
print('')
while
1: print('')
print()
if digit[p]#上述第一步
digit[p+1]=digit[p]+1
p+=1
pass
elif digit[p]==num and p!=0:# 上述第二步
p-=1
digit[p]+=1
pass
elif digit[0]==num:
break
pass
pass
可能產生的集合
無字典順序集合 說明 給定一組數字或符號 產生所有可能的集合 包括空集合 例如給定1 2 3 則可能的集合為 解法 如果不考慮字典順序,則有個簡單的方法可以產生所有的集合,思考二進位數字加法,並注意 1出現的位置,如果每個位置都對應乙個數字,則由1所對應的數字所產生的就是乙個集合,例 如 000 0...
每日一演算法 產生可能的集合 二
產生可能的集合 說明給定一組數字或符號,產生所有可能的集合 包括空集合 例如給定1 2 3,則可能的集合為 如果要產生字典順序,例如若有4個元素,則 簡單的說,如果有n個元素要產生可能的集合,當依序產生集合時,如果最後乙個元素是n,而倒數第二個元素是m的話,例如 則下乙個集合就是,再依序加入後續的元...
Runtime Error可能產生的原因
runtime error 執行時錯誤 就是程式執行到一半,程式就崩潰了。除以零 陣列越界 int a 3 a 10000000 10 指標越界 int p p int malloc 5 sizeof int p 1000000 10 使用已經釋放的空間 int p p int malloc 5 s...