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 }