將1 n個整數按照字典序進行排序

2022-03-11 14:12:21 字數 935 閱讀 1930

題意:給定乙個整數n,給定乙個整數k,將1~n個整數按字典順序進行排序,返回排序後第k個元素。

多組輸入,t<=100,n<=1e6

分析:這個題和之前做的模擬出棧的性質挺像的,不是你將1-n個數字排好序或者直接算出第k個數時誰,而是模擬題意的炒作,一步步填充,填充到第k個元素結束

可以分成兩步來做,首先求出以1,2......9開頭的數且小於n的數總共有多少個,並且每算出乙個就用k-數目,如果到了某個數不夠減了,說明我們要求的那個數就是一這個數開頭的,跳出迴圈。

第二步,一點點來,具體實現就直接看**吧

我自己寫還是錯了很多次才最終寫對

#includeusing

namespace

std;

typedef

long

long

ll;const

int inf=1

<<30

;const

int maxn=6007

;const

double pi=acos(-1

);const

int mod=1e9+7

;int ans=0

,n,k;

//用來得到比n小,以i為開頭的數的數目

int getnum(int n,int

i)

if(n>=(base*i))sum+=n-base*i+1

;

return

sum;

}void getans(int &cnt,int

cul)

for(int i=0;i<=9;i++)

}int

main()

int cnt=0

; getans(cnt,i);

cout

}return0;

}

題目26 關於1 N的整數查詢排序問題

題目 此題緣於 程式設計珠璣 乙個檔案包含最多n個正整數,每乙個都小於 n,每乙個數都不會出現兩次以上。將這個檔案排序。珠璣上的解法 phase 1 initialize set to empty for i 0,n bit i 0 phase 2 insert present elements i...

堆排序示例 對n個整數進行排序

堆排序是一種比較高效的演算法.雖然在大規模排序時不及快排,但是這個演算法較容易實現,不易錯 因為沒有用到遞迴 一般規模的排序還是效果不錯的.以下是示例 includeusing namespace std void heapsort int num,int n func decl.int main ...

對n個整數用O n 的時間進行排序

1 求得min,max 2 開闢空間 a 0,max min 1 3 if min 0 data i min else data i min 4 for i 0 to n a data i 1 5 index 0 for i 0 to max min if a i 1 data index i in...