前面我们大概的已经学习过很多关于循环的知识,这一篇博客我们重点引入一些习题进行分析,涉及到循环的东西,无非就是将变量之间的关系和规律找到,这一解我们就将要仔细的分析每一个题目具体怎么去寻找这种规律。
第一题
打印杨辉三角十行 如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
…
这就是我们的输出目的
问题分析
方法一:首先我们观察到这个样子的一个三角结构,好像可以把它放到一个二维数组当中,那些不需要打印的数字,我们都可以将其初始化为0。那么,我们就可以观察到这样一个现象,除了每一行的第一个数字以外,其余的数字均可以这样表示。
a[i][j] = a[i-1][j-1] + a[i-1][j];
而每一行的第一个数据我们都可以使其初始化为1。
最终我们三角化打印这个二维数据即可
i来控制第几行
j来控制每行打印多少个数据。
那么i的取值范围应该是[0,len),j的取值范围应该是[0,i]。
#include<iostream>
using namespace std;
int main(){
int a[10][10] = {
0};
for (int i = 0; i < 10; ++i){
for (int j = 0 ; j <= i; ++j){
if(j == 0){
a[i][j] = 1;
}else{
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
}
}
for(int i = 0 ; i < 10; ++i){
for(int j = 0; j <= i ++j){
cout<<a[i][j]<<"\t"
}
cout<<endl;
}
return 0;
}
方法二:我们同样可以这样思考这个问题,通过观察我们很容易看出来,如果想要打印第十行数据的时候,一共需打印十个值,那么我们就可以一开始定义一个长度为10的数组,第一行,打印这个数组的一个元素,第二行打印两个以此类推。
接下来我们观察数组中元素的特点。
{1, 2, 1}---->{1, 3, 3, 1}。
假设i表示第i行的打印,那么我们可以很明显的看出来,每次首先给数组当中新添加的a[i]元素的值就是1,并且除了第0号元素和第i号元素以外,其他元素均满足这样的关系:
a[i] += a[i-1];
所以如果用j的值来实现每一行具体的操作时候,j的取值范围应该是从i-1一直到1。
这里我们为什么不说是从1到i-1呢,仔细思考这样一个问题,当我们把i的值覆盖以后,当我们计算i+1的值时候,用到的i位置的值还是原来的值吗?这也就是我们这样设计的原因,最后把整个数组打印即可。
#include<iostream>
using namespace std;
int main(){
int a[10];
for (int i = 0; i < 10, ++i){
a[i] = 1;
for (int j = i - 1; j > 0; --j){
a[j] += a[j-1];
}
for (int k = 0 ; k <= i; ++k){
cout<<a[k]<<"\t";
}
cout<<endl;
}
return 0;
}
题目二
打印九九乘法表,打印格式如下:
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6
…
题目分析
观察乘法表,我们可以很明显看到,每个算式都是由三个数字构成的,i,j和result。每一行当中的i的值都是不变的,并且i的取值范围是[1, 9]。而我们可以很明显的看出来,j的取值范围应该是[1, i]。所以这个题目我们可以很快的给出如下一种解法:
#include<iostream>
using namespace std;
int main(){
for(int i = 1; i < 10; ++i){
for