C语言编程练习40:Ignatius and the Princess II
Now our hero finds the door to the BEelzebub feng5166. He opens the door and finds feng5166 is about to kill our pretty Princess. But now the BEelzebub has to beat our hero first. feng5166 says, "I have three question for you, if you can work them out, I will release the Princess, or you will be my dinner, too." Ignatius says confidently, "OK, at last, I will save the Princess."
"Now I will show you the first problem." feng5166 says, "Given a sequence of number 1 to N, we define that 1,2,3...N-1,N is the smallest sequence among all the sequence which can be composed with number 1 to N(each number can be and should be use only once in this problem). So it's easy to see the second smallest sequence is 1,2,3...N,N-1. Now I will give you two numbers, N and M. You should tell me the Mth smallest sequence which is composed with number 1 to N. It's easy, isn't is? Hahahahaha......"
Can you help Ignatius to solve this problem?
"Now I will show you the first problem." feng5166 says, "Given a sequence of number 1 to N, we define that 1,2,3...N-1,N is the smallest sequence among all the sequence which can be composed with number 1 to N(each number can be and should be use only once in this problem). So it's easy to see the second smallest sequence is 1,2,3...N,N-1. Now I will give you two numbers, N and M. You should tell me the Mth smallest sequence which is composed with number 1 to N. It's easy, isn't is? Hahahahaha......"
Can you help Ignatius to solve this problem?
Input
The input contains several test cases. Each
test case consists of two numbers, N and M(1<=N<=1000,
1<=M<=10000). You may assume that there is always a sequence
satisfied the BEelzebub's demand. The input is terminated by the end of
file.
Output
Output
For each test case, you only have to output
the sequence satisfied the BEelzebub's demand. When output a sequence,
you should print a space between two numbers, but do not output any
spaces after the last number.
Sample Input
Sample Input
6 4 11 8Sample Output
1 2 3 5 6 4 1 2 3 4 5 6 7 9 8 11 10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <iostream> #include <cstdio> #include <string> #include <algorithm> using namespace std; int main() { int n,m; while ( scanf ( "%d%d" ,&n,&m)!=EOF) { int a[1050]; for ( int i=0;i<n;i++) { a[i]=i+1; } int p=0; do { p++; if (p==m) { for ( int i=0;i<n-1;i++) { printf ( "%d " ,a[i]); } cout << a[n-1]<<endl; break ; } } while (next_permutation(a,a+n)); } return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步