#include <stdio.h> #include <string.h> #include <assert.h> #define MAX 26 //原书中的解释有误 int main(void) { char digits[MAX]; int n; int iCnt; int i; int j; char cTemp; memset(digits,0,sizeof(digits)); printf("Input the number n/n"); printf("---------------------------/n"); scanf("%d",&n); printf("n = %d/n",n); assert(n <= MAX); for (iCnt = 0;iCnt < n;++iCnt) digits[iCnt] = iCnt + 1; while (1) { for (iCnt = 0; iCnt < n; ++iCnt) //printf("%c",'A'+digits[iCnt] - 1); printf("%d",digits[iCnt]); printf("/n"); for (i = n - 2; i >= 0; --i) if (digits[i] < digits[i+1]) break; if (i < 0) break; for (j = n-1; j >= 0;--j) if (digits[i] < digits[j]) break; cTemp = digits[i]; digits[i] = digits[j]; digits[j] = cTemp; for ( i++,j = n-1; i < j; i++,j--) { cTemp = digits[i]; digits[i] = digits[j]; digits[j] = cTemp; } } return 0; }