//按lins(*有为青年*)思路实现的代码,其实这样作是比较麻烦的
#include <stdio.h>
int f10(int count) //计算10的count次幂
{
int i=1;
for (int n=0;n< count;n++)
i*=10;
return i;
}
int main(int argc, char *argv[])
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int k;//自增量表示(00 0000 0000)b到(11 1111 1111)b
int count;//用于计数k中置1的位
int i;//控制位运算时取值的位
int show;//显示用的值
int all=0;
for(k=0;k<0x400;k++)
{
count=0;show=0;
for(i=0;i<10;i++)
{
if((1<<i)&k)
{
show+=a[i]*f10(count);
count++;
}
if( count>3) break;
}
if (3==count){all++; printf("%d is a seleted\n",show);}
}
printf("all is %d\n",all);
return 0;
}
j = 0;
for ( i = n; i >= 1; i--)
{
if ( rec[i] < m-j )
return i;
j++;
}
return 0;
}
int Go(int m, int n)
{
int i, j, k;
int rec[100];
for ( i = 1; i <= n; i++)
{
rec[i] = i;
printf("%d ", rec[i]);
}
printf("\n");
while ( (k = IsEnd(rec, m, n)) != 0)
{
rec[k]++;
for ( i = k+1; i <= n; i++) rec[i] = rec[k]+(i-k);
for ( i = 1; i <= n; i++) printf("%d ", rec[i]);
printf("\n");
}
return 0;
}
int main()
{
int m, n;
printf("input M N:");
scanf("%d%d", &m, &n);
Go(m, n);
return 0;
}