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;
}