编程之美:电话号码对应单词 多重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};
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
};
多重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");
}
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);
}
{
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 |
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[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(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);
}
相关文章推荐
- 【编程之美题目】电话号码对应英语单词(非递归办法控制for循环个数)
- Objective-C学习笔记(十)——循环语句for和do-while的使用
- javascript中循环语句 while、do-while、for-in、for用法区别
- 编写一段程序,从标准输入读取string对象的序列直到连续出现两个相同的单词或者所有单词都读完为止。使用while循环一次读取一个单词,当一个单词连续出现两次是使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有人任何单词是重复出现的。
- c++中的结构化语句 判断语句if 分支语句switch 循环语句 while 和 do while 循环语句for的使用
- Swift笔记:For-In、While 循环、if条件语句
- 分支语句(if,switch case)、循环(for,while,do while)、continue、break、随机数
- JAVA输出九九乘法表,用for,dowhile,while循环语句输出
- 编程之美第三章-3.2-电话号码以及对应的单词
- 使用for、while 以及repeat-break实现循环语句
- JavaSE教程-04Java中循环语句for,while,do···while-练习
- Python 循环语句之 while,for语句详解
- Shell脚本中循环语句for,while,until用法
- Shell_循环语句(for、while、case)深入讲解
- Shell脚本之for、while循环语句和case分支语句
- 黑马程序员——循环语句while和for的用法
- JavaSE教程-04Java中循环语句for,while,do···while-思维导图
- js---javaScript(循环语句的使用实例)for while do....while(转移语句): break, continue , return
- C#中循环语句:while、for、foreach的使用
- 分支结构、循环结构流控语句(if、switch、for、while)