编程之美:电话号码对应单词 多重for循环转化为while语句

int main(void)
{  
 int n=4;
 int total[10]={0,0,3,3,3,3,3,4,3,4};
 int number[4]={2,3,4,5};
 int answer[4]={0};

代码清单3-2

c[number[i]][answer[i]]的显示:其中number[i]为i位电话号码,answer[i]为i位号码对应的字符;

char c[10][10] =

{

     "",                      //0

     "",                      //1

     "ABC",                   //2

     "DEF",                   //3

     "GHI",                   //4

     "JKL",                   //5

     "MNO",                   //6

     "PQRS",                  //7

     "TUV",                   //8

     "WXYZ",                  //9

};

代码清单3-3

多重for循环;围绕answer[i]从0-telnum的循环;如果号码位数升级,代码修改比较麻烦,下面的while语句实现只修改参数n(号码位数)就能实现号码位数升级功能;

for(answer[0] = 0; answer[0] < total[number[0]]; answer[0]++)

     for(answer[1] = 0; answer[1] < total[number[1]]; answer[1]++)

          for(answer[2] = 0; answer[2] < total[number[2]]; answer[2]++)

          {

               for(int i = 0; i < 3; i++)

                    printf("%c",c[Number[i]][answer[i]]);

               printf("/n");

          }

代码清单3-4

while语句:可以看到下面代码 减少循环层次;通过k的if判断和k--实现多重for循环功能,其中break和减一answer[k]置0关键;

while(true)

{

     // n为电话号码的长度

     for(i = 0; i < n; i++)

          printf("%c", c[number[i]][answer[i]]);

     printf("/n");

     int k = n - 1;

     while(k >= 0)

     {

          if(answer[k] < total[number[k]] - 1)

          {

               answer[k]++;

                break;

          }

          else

          {

               answer[k] = 0; k--;

          }

     }

     if(k < 0)

          break;

}

或者从k=0;开始显示
 while(true)
 {
     // n为电话号码的长度
      for(int i = 0; i < n; i++)
         printf("%c", c[number[i]][answer[i]]);
         printf("/n");
         num++;
  
  
int k = 0;
  while(k >= 0)
  {
       if(answer[k] < total[number[k]] - 1)
       {
        answer[k]++;
        break;
       }
       else
      {
        answer[k] = 0; k++;
       }
  }
  
if(k>n)
   break;
 }
 printf("%d",num);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值