7-16 求符合给定条件的整数集

给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。

输入格式

输入在一行中给出A。

输出格式

输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。

输入样例

2

输出样例

234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543

分析与答案

4选3有序排列一共有24种情况,下面的程序使用一个3层嵌套的循环来将应该输出的数字储存到一个数列中,输出时使用循环变量来计算已经输出的数量,从而确定是输出空格、换行或者不输出间隔。

3层嵌套的每一层循环条件都是相同的递增,但是当下一层的数字与上一层相等时就不会输出,继续下一次循环。

#include <stdio.h>

/*
    4选3有序排列所有情况:
    123 124 132 134 142 143
    213 214 231 234 241 243
    312 314 321 324 341 342
    412 413 421 423 431 432
    共24种
*/

int main(){
    int start, i = 0, j = 0, k = 0;
    int num[4],count = 0, array[24] = {0};
    scanf("%d",&start);
    for(i=0;i<4;i++){
        num[i]=start + i;
    }
    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            if(j==i)
                continue;
            for(k=0;k<4;k++){
                if(k==j||k==i)
                    continue;
                array[count]=num[i]*100+num[j]*10+num[k];
                count++;
            }
        }
    }
    for(i=0;i<24;i++){
        printf("%d",array[i]);
        if((i+1)%6 != 0)
            printf(" ");
        if((i+1)%6==0 && i != 23)
            printf("\n");
    }
    return 0;
}

7-16 测试点