for循环
找最小值
- 头文件algorithm(算法)的max(),min(),和abs()
- max() min()参数为两个,可以是整型或浮点型,返回最大值和最小值
- 适用于个数不多的比较时
- abs()返回绝对值,整数
- math的fabs(),进行浮点数的取绝对值功能
解法1:使用min()
#include <algorithm>
int n;
cin << n;
//int tmp = 2147483647;
int tmp, minnum =2100000000;
for(int i = 1; i <= n ; i++){
cin << tmp;
minnum = min(minnum , tmp)
}
cout << minnum;
解法2: 使用条件判断
int n;
cin << n;
//int tmp = 2147483647;
int tmp, minnum =2100000000;
for(int i = 1; i <= n ; i++){
cin << tmp;
// 比较 最新输入的值是不是比当前最小值还小
if(tmp < minnum){
minnum = tmp;
}
}
cout << minnum;
while循环
一尺之棰
注意,从第二天开始,所以定义days 默认为1;
#include <iostream>
using namespace std;
int main() {
int a;
int days = 1;
// a = 1
cin >> a;
while (a > 1) {
days++;
a = a / 2;
cout << "days: " << days << " a: " << a << endl;
}
cout << days;
}
多重循环
循环语句也能互相嵌套。如果需要循环的“大操作”中有好几个重复 的小操作,就可以进行循环嵌套。 如果超过一个语句,或者需要调整层级,则必须要大括号,建议 全部加上括号。
注意内层循环变量名不能和外层循环变量名冲突。
for (;;) {
for (;;) {
for (;;) {
// 内层循环体
}
}
for (;;)
while (...) {
// 内层循环体
}
}
数字直角三角形
我们可以把这个任务分成两个层级
- 大任务:输出每一行。需要一个外层循环,其循环体就是输出 一行的内容。循环变量从 1 到 n (也可以 0 到 n-1)。
- 小任务:输出一行中的每一个数字。需要一个内层循环,用于 输出一行中的每一个数字。共需要打出 n 行,所当处理第 i 行时, 需要输出 n-i+1 个数字。
定义变量 cnt 来记录输出到那个数字
#include <iostream>
using namespace std;
int main() {
int cnt = 0, n;
scanf("%d", &n);
for(int i = 1; i <= n ; i++){
for (int j = 0; j <= n -i ;j++){
// ++ cnt;
// cout << cnt ;
printf("%02d",++cnt);
// printf("%02d",cnt++);
}
cout << endl;
}
求阶乘之和
long long n ; 有效值为 9 * 10^18 ;
例 4.7 (洛谷 P1009,有改动)
计算 S = 1! + 2! + 3! + ⋯ + n! (n ≤ 20) 的值,其中 i! 是指 i 的阶乘,即 i! = 1 × 2 × ⋯ × i 。
分析: 按计算器可发现, 20 的阶乘大约 2.4 × 1018,所以可以使用 long long 类型存下。
long long 是一种整数类型,可以放下 9 × 1018的数字,但是比 int 又大又慢。