c语言之基础循环练习

前面我们大概的已经学习过很多关于循环的知识,这一篇博客我们重点引入一些习题进行分析,涉及到循环的东西,无非就是将变量之间的关系和规律找到,这一解我们就将要仔细的分析每一个题目具体怎么去寻找这种规律。

第一题

打印杨辉三角十行 如下:
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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值