注册 登录
编程论坛 C语言论坛

这个程序没看懂逻辑,有谁解释一下?

黑暗骑士5D 发布于 2019-12-04 10:15, 1182 次点击
给定不超过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



int main(){
   int i,j,k;
   int cnt=0;
   int a=0;
   scanf("%d",&a);
   i=a;//注意i,j,k的初始值是在while()外面初始化的
   while(i<=a+3){
       j=a;
       while(j<=a+3){
           k=a;
           while(k<=a+3){
               if(i!=j&&i!=k&&j!=k){
                   cnt++;
                   printf("%d%d%d",i,j,k);
                   if(cnt==6){
                       printf("\n");
                       cnt=0;
                   }else{
                       printf(" ");
                   }
               }
               k++;
           }
           j++;
       }
       i++;
   }
}
4 回复
#2
rjsp2019-12-04 10:33
完全按照你提供的代码逻辑改写,改写成利于正常人类阅读的样式

程序代码:
#include <stdio.h>

int main( void )
{
   unsigned a;
   scanf( "%u", &a );

   unsigned cnt = 0;
   for( unsigned i=a; i!=a+4; ++i )
   {
       for( unsigned j=a; j!=a+4; ++j )
       {
           for( unsigned k=a; k!=a+4; ++k )
           {
               if( i!=j && i!=k && j!=k )
                   printf( "%u%u%u%c", i, j, k, " \n"[++cnt%6==0] );
           }
       }
   }
}

#3
黑暗骑士5D2019-12-04 11:27
回复 2楼 rjsp
printf("%d%d%d%c",i,j,k," \n"[++cnt%6==0])
看不懂啊,这个中括号里是啥意思,为什么这么用
#4
rjsp2019-12-04 15:36
回复 3楼 黑暗骑士5D
那你就将
                if( i!=j && i!=k && j!=k )
                    printf( "%u%u%u%c", i, j, k, " \n"[++cnt%6==0] );

改为
                if( i!=j && i!=k && j!=k )
                {
                    printf( "%u%u%u", i, j, k );
                    putchar( ++cnt%6==0 ? '\n' : ' ' );
                }
好了
#5
bcbbcclbbc2019-12-05 15:20
就是题目的要求
输出格式:

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