您的位置:首页 > 编程语言

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

2011-05-12 10:14 302 查看
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐