問題簡述:
給出乙個n代表有乙個集合,集合有1~n中的數字組成。集合的所有非空子集,按照字典順序排序,給出乙個m,輸出第m個子集的元素。
問題分析:
尋找規律可知an的子集可分為n組資料,每組資料分別以1,2,3……n開頭,且每組資料含有的集合個數與a(n-1)的關係為 len[n]=len[n-1]*(n-1)+1 , 由此遞推式可求得n為[1,20]的每組資料含有的集合個數。
接著需要判斷第m個集合位於第i組資料,輸出其第乙個元素i後,將集合中的元素i刪除,以一組資料為大集合,判斷第m個集合位於該組資料的第幾個集合,重複上述步驟輸入第二個元素,直至子集只有空集。
易錯點在於輸入的資料m可能為乙個很大的數,需定義為long long int.
#includeusing namespace std;
long long int len[1005]=;
int main()
for(int i=0;i<=n;i++)
s[i]=i;
while(n>0&&m>0)
m-=((t-1)*len[n]+1);
if(m==0)
else
cout<<" ";
}n--;
} }}
第二期訓練第五題(HDU 2010)
問題簡述 輸入多組兩個三位數的數字,求在這兩個數字範圍內符合各位數字的立方和等於其本身的數。並將這些數按序輸出。如果沒有這樣的數字,則輸出 no get 1 求某個數的冪用 pow 數字 冪 這個函式在標頭檔案中,函式原型為double pow double x,double y 2 用sort函式...
第二期訓練題1
問題分析 該題只需按照題目要求輸入資料,並將每組資料的第乙個作為最小值,再將這個最小值逐一與輸入的資料比較大小,如果輸入的資料小於最小值,則將輸入的資料代替最小值,最後得到這組資料的最小值。ac通過的 如下 includeusing namespace std int main if m 0 cou...
第二期訓練題第1題
problem description 在乙個國家僅有1分,2分,3分硬幣,將錢n兌換成硬幣有很多種兌法。請你程式設計序計算出共有多少種兌法。input 每行只有乙個正整數n,n小於32768。output 對應每個輸入,輸出兌換方法數。sample input 2934 12553 sample ...