1 #include<stdio.h>
2 #include<string.h>
3 int a[10],m,n;
4
5 //取数算法
6
7
8 /*1、从m中选出n个全排列,从大到小,不允许重复
9
10 3 2 输入
11
12 32
13 31
14 21
15
16 */
17 void fun1(int m,int n)
18 {
19 int i,j;
20 for(i=m;i>0;i--)
21 {
22 a[n]=i;
23 if(n>1)
24 fun1(i-1,n-1);
25 else
26 {
27 for(j=a[0];j>0;j--)
28 printf("%d",a[j]);
29 printf("\n");
30 }
31 }
32 }
33
34
35 /*2、从m中选出n个全排列,从大到小,允许重复
36
37 3 2 输入
38
39 33
40 32
41 31
42 22
43 21
44 11
45
46 */
47 void fun2(int m,int n)
48 {
49 int i,j;
50 for(i=m;i>0;i--)
51 {
52 a[n]=i;
53 if(n>1)
54 fun2(i,n-1);
55 else
56 {
57 for(j=a[0];j>0;j--)
58 printf("%d",a[j]);
59 printf("\n");
60 }
61 }
62 }
63 /*3、从m中选出n个全排列,从小到大,不允许重复
64
65 3 2 输入
66
67 12
68 13
69 23
70
71 */
72 void fun3(int u,int v)
73 {
74 int i,j;
75 for(i=u;i<=m;i++)
76 {
77 a[v]=i;
78 if(v<n)
79 fun3(i+1,v+1);
80 else
81 {
82 for(j=1;j<=a[0];j++)
83 printf("%d",a[j]);
84 printf("\n");
85 }
86 }
87 }
88 /*4、从m中选出n个全排列,从小到大,允许重复
89
90 3 2 输入
91
92 11
93 12
94 13
95 22
96 23
97 33
98
99 */
100 void fun4(int u,int v)
101 {
102 int i,j;
103 for(i=u;i<=m;i++)
104 {
105 a[v]=i;
106 if(v<n)
107 fun4(i,v+1);
108 else
109 {
110 for(j=1;j<=a[0];j++)
111 printf("%d",a[j]);
112 printf("\n");
113 }
114 }
115 }
116
117
118 // 给定一个数
119
120 /*给定一个数求这个数的从小到大的全排列,不许重复
121
122 3 输入
123
124 123
125 132
126 213
127 231
128 312
129 321
130 */
131 void fun5(int u)
132 {
133 int i,j,ok;
134 if(u==m)
135 {
136 for(i=0;i<m;i++)
137 printf("%d",a[i]);
138 printf("\n");
139 }
140 else
141 for(i=1;i<=m;i++) //for(i=m;i>0;i--) 即从大到小
142 {
143 ok=1;
144 for(j=0;j<u;j++)
145 if(a[j]==i)
146 ok=0;
147 if(ok)
148 {
149 a[u]=i;
150 fun5(u+1);
151 }
152 }
153 }
154
155 /*给定一个数求这个数的从小到大的全排列,不许重复
156 2 输入
157
158 11
159 12
160 21
161 22
162
163
164 */
165 void fun6(int u)
166 {
167 int i;
168 if(u==m)
169 {
170 for(i=0;i<m;i++)
171 printf("%d",a[i]);
172 printf("\n");
173 }
174 else
175 for(i=1;i<=m;i++) //for(i=m;i>0;i--) 即从大到小
176 {
177 a[u]=i;
178 fun6(u+1);
179 }
180 }
181
182 /*int main()
183 {
184 while(scanf("%d%d",&m,&n)!=EOF)
185 {
186 a[0]=n;
187 fun1(m,n);
188 fun2(m,n);
189 fun3(1,1);
190 fun4(1,1);
191
192 }
193 return 0;
194 }*/
195
196 int main()
197 {
198 while(scanf("%d",&m)!=EOF)
199 fun6(0);
200 return 0;
201 }