循环的应用

在c++中,循环有很多用处,这次来讲一下

一、枚举

怎么说?让我们看几道例题

1. 鸡兔同笼问题(1)

题目描述

鸡兔同笼是中国古代的数学名题之一。大约在1500年前,《孙子算经》中就记载了这个有趣的问题。有若干只鸡兔同在一个笼子里,从上面数,有50个头,从下面数,有160只脚。问笼中各有多少只鸡和兔?

输入

输出

一行,两个整数用空格隔开,分别表示鸡,兔的数目。

题目分析

这道题从头的个数开始遍历,最后看哪一个符合

总腿数
050 50 × 4 + 0 × 2 = 200 50×4+0×2=200 50×4+0×2=200
149 49 × 4 + 1 × 2 = 198 49×4+1×2=198 49×4+1×2=198
248 48 × 4 + 2 × 2 = 196 48×4+2×2=196 48×4+2×2=196
347 47 × 4 + 3 × 2 = 194 47×4+3×2=194 47×4+3×2=194
491 1 × 4 + 49 × 2 = 102 1×4+49×2=102 1×4+49×2=102
500 0 × 4 + 50 × 2 = 100 0×4+50×2=100 0×4+50×2=100
题解
#include <iostream>
using namespace std; 
int main() {
	for(int x=0; x<=50; x++) { //x是鸡的腿数 
		int y = 50 - x; //y是兔的腿数
		if(x*2+y*4==160) {
			printf("%d %d", x, y); 
			break; 
		}
	}
	return 0; 
}

鸡兔同笼问题(2)

题目描述

有若干只鸡兔同在一个笼子里,从上面数,有n个头,从下面数,有m只脚。问笼中各有多少只鸡和兔?

输入

两个数,分别是nm

输出

还是一行,两个整数用空格隔开,分别表示鸡,兔的数目。

解析

和上道题的意思一样

题解
#include <iostream>
using namespace std; 
int main() {
	int n, m; 
	cin >> n >> m; 
	for(int x=0; x<=n; x++) { //x是鸡的腿数 
		int y = n - x; //y是兔的腿数
		if(x*2+y*4==m) {
			printf("%d %d", x, y); 
			break; 
		}
	}
	return 0; 
}

二、最大公因数 & 最小公倍数

要了解什么是最大公因数和最小公倍数,那么就要了解什么是公因数和公倍数,还要了解什么是因数和倍数。讲不了这么多,就大概说一下
最大公因数是两个数的公有的最大因数,nm的最大公因数记作(n, m)或者gcd(n, m);最小公倍数是两个数共有的最小因数,nm的最小公倍数记作[n, m]或者lcm(n, m)。看以下例子

最大公因数

24的因数:1, 2, 3, 4, 6, 8, 12, 24 
16的因数:1, 2, 4, 8, 16
24和16的公因数:1, 2, 4, 8
24和16的最大公因数:8

最小公倍数

24的倍数:24, 48, 72, 96, 120, 144......
16的倍数:16, 32, 48, 64, 80, 96......
24和16的公倍数:48, 96...... 
24和16的最小公倍数:48

好了,'\002'正文开始

1. 求最大公因数

题目描述

求两数a, b的最大公因数

输入

输入两个数,代表a和b

输出

a和b的最大公因数

解析

在算两个数的最大公因数时,可以试试欧几里得算法
设两数为a、b(a>b),求a与b最大公因数,先用a除以b,如果余数为0,那么gcd(a, b) = b,否则用b除以余数,再次重复,直到余数为0,最终算式的除数为a和b的最大公因数

求 36 和 24 的最大公因数
36 ÷ 24 = 1 ...... 12
24 ÷ 12 = 2 
∴ gcd(36, 24) = 12
求 96 和 128 的最大公因数
128 ÷ 96 = 1 ...... 32
96 ÷ 32 = 3
∴ gcd(a, b) = 32
题解
#include <iostream>
using namespace std; 
int main() {
	int a, b; //a为被除数 b为除数
	cin >> a >> b; 
	if(a<b) {
		swap(a, b); //这个是交换函数,可以交换两个变量的值 
	}
	while(a%b) { //相除看是否有余数
		int t = a % b; //t表示余数
		a = b; 
		b = t; 
	}
	cout << b; //输出最终除数
}

1. 求最小公倍数

题目描述

求两数a, b的最小公倍数

输入

输入两个数,代表a和b

输出

a和b的最小公倍数

解析

因为a和b的公因数都有最大公因数,所以用乘积除以最大公因数就是了

题解
#include <iostream>
using namespace std; 
int main() {
	int a, b; 
	cin >> a >> b; 
	int r = a * b; //用r来记录a和b的乘积
	if(a<b) {
		swap(a, b); //这个是交换函数,可以交换两个变量的值 
	}
	while(a%b!=0) {
		int t = a % b; 
		a = b; 
		b = t; 
	}
	cout << r/b; 
	return 0; 
}

三、图形打印

这个不过多讲,总之找规律就是了

1. 长方形

输入数字n和m,输出一个n*m布局的*长方体

题解
#include <iostream>
using namespace std; 
int main() {
	int n, m; 
	cin >> n >> m; 
	for(int i=0; i<m; i++) { //竖向打印 
		for(int j=0; j<n; j++) { //横向打印 
			cout << '*'; 
		}
		cout << endl; //换行 
	}
	return 0;  
}

2. 正方体

输入数字n,画出一个边长为n的正方体

题解
#include <iostream>
using namespace std; 
int main() {
	int n; 
	cin >> n; 
	for(int i=0; i<n; i++) { //横向竖向都一样 
		for(int j=0; j<n; j++) { 
			cout << '*'; 
		}
		cout << endl; //换行 
	}
	return 0;  
}

3. 等腰直角三角形

输入数字n,画出一个腰长为n的等腰三角形

题解
#include <iostream>
using namespace std; 
int main() {
	int n; 
	cin >> n; 
	for(int i=1; i<=n; i++) { 
		for(int j=1; j<=i; j++) { 
			cout << '*'; 
		}
		cout << endl; //换行 
	}
	return 0;  
}

4. 等边三角形

输入数字n,画出一个高为n的等边三角形

题解
#include <iostream>
using namespace std; 
int main() {
	int n; 
	cin >> n; 
	for(int i=1; i<=n; i++) { 
		for(int j=n-i; j>=0; j--) { 
			cout << ' '; 
		}
		for(int j=0; j<i*2-1; j++) {
			cout << '*'; 
		}
		for(int j=n-i; j>=0; j--) { //13-15可以不要 
			cout << ' '; 
		}
		cout << endl; //换行 
	}
	return 0;  
}

4. 平行四边形

输入数字n,画出一个高为n的平行四边形

题解
#include <iostream>
using namespace std; 
int main() {
	int n; 
	cin >> n; 
	for(int i=1; i<=n; i++) { 
		for(int j=n-i; j>=0; j--) { 
			cout << ' '; 
		}
		for(int j=0; j<n; j++) {
			cout << '*'; 
		}
		for(int j=0; j<i; j++) { //13-15可以不要 
			cout << ' '; 
		}
		cout << endl; //换行 
	}
	return 0;  
}

今天就写到这(有点多)
请添加图片描述把这个点成红色的
拜拜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值