1. 程式人生 > >hiho一下第143周

hiho一下第143周

題目1 : hiho密碼
時間限制:10000ms
單點時限:1000ms
記憶體限制:256MB
描述
小Ho根據最近在密碼學課上學習到的知識,開發出了一款hiho密碼,這款密碼的祕鑰是這樣生成的:對於一種有N個字母的語言,選擇一個長度為M的單詞;將組成這個單詞的所有字母按照順序不重複的寫出(即遇到相同字母時跳過);然後將字母表剩下的沒有使用過的字母按照順序在其後進行排列。
如對於有5個字母的hiho語,選擇單詞1, 2, 2, 4, 3(此處數字表示字母在字母表中的順序),則祕鑰為1,2,4,3,5。
但是有一天小Ho在計算出了祕鑰之後,卻發現他弄丟了一開始選擇的單詞,於是他找到了你,希望你能夠幫他找到能夠生成這個祕鑰的最短的單詞。
輸入
每個輸入檔案包含單組測試資料。
每組測試資料的第一行為一個正整數N,意義如前文所述。
每組測試資料的第二行為N個正整數,用來描述一個祕鑰,其中第i個正整數Ai表示祕鑰的第i個字元在字母表中的順序。
對於100%的資料,滿足N<=1000,1<=Ai<=N。
對於100%的資料,滿足對於任意1<=i, j<=N,若i≠j,則Ai≠Aj。
輸出
對於每組測試資料,輸出能夠生成輸入給出的祕鑰的最短的單詞(空串不認為是單詞)。由於字母表沒有給出,所以對於每個字母,輸出其在字母表中的順序即可(用空格隔開)。
樣例輸入
5
1 2 4 3 5
樣例輸出
1 2 4

//對於程式的正確性而言,邊界控制是很重要的,
//這一點應當繼續摸索
#include<stdio.h>
int main()
{
    int n,i,a[1010];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",a+i);
    }
    for(i=n-1;i>0;i--){
        if(a[i-1]>a[i])break;
    }
    if(!i)printf("%d",a[i]);
    else{
        for(n=0;n<i;n++)printf
("%d ",a[n]); } return 0; }