for 循环
for 循环
// for 循环语法格式
for (循环变量初始化; 循环条件; 每轮循环结束操作) {
...
...
}
观察循环的执行过程
for (int i = 0; i < n; i++) cout << i << ' ';
for (int i = 1; i <= n; i++) cout << i << ' ';
求1到n的和
int sum = 0;
for (int int i = 1; i <= n; i++) sum += n;
求n的阶乘
int t = 1;
for (int i = 1; i <= n; i++) t *= i;
自增自减
i++ 与 ++i
i++; // 先把i的值给出去,自己再+1
++i; // 先自己+1,然后把+1之后的值,给出去
两者还有其他区别吗?
// 在发音上,i++更方便一些
// i++会在底层有一个自我备份的操作,但这个操作带来的效率影响,可忽略不计
递推数列
输出等差数列
// 已知 a1 = 1, an = 15, d = 2
for (int i = a1; i <= an; i += d)
cout << i << ' ';
// 已知 a1 = 1, a2 = 3, n = 5
// 分析可知 d = a2 - a1
int d = a2 - a1;
for (int i = a1, j = 1; j <= n; j++, i += d)
cout << i << ' ';
// 在这里,j 是负责计数第几项的
输出等比数列
// 已知 a1 = 1, an = 1024, q = 2
for (int i = 1; i <= an; i *= q)
cout << i << ' ';
// 已知 a1 = 1, q = 2, n = 5
for (int i = 1, j = 1; j <= n; j++, i *= q)
cout << i << ' ';
// 在这里,j 是负责计数第几项的
输出斐波那契数列
// 已知斐波那契数列,1, 1, 2, 3, 5, 8,...
// 请输出斐波那契数列的第10项
int a = 1, b = 1, c;
for (int i = 3; i <= 10; i++) {
c = a + b;
a = b;
b = c;
}
cout << c;
如果问,请输出斐波那契数列的第2项。
以上代码,还试用吗?如何处理呢?
// 我们可以使用if语句进行特判
// 我们也可以将 c 初始化成 1
// 即使我们没有进入到 for 循环,直接输出 c,
// 但也可以得到正确的结果
循环输入
第一行,输入一个整数 n
第二行,输入 n 个数
输出 n 个数的和
int sum = 0, n, x;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x;
sum += x;
}
cout << sum;
循环判断
输出 1 ~ n 的所有奇数
for (int i = 1; i <= n; i++)
if (i % 2) cout << i << ' ';
// 也可以这样写
for (int i = 1; i <= n; i += 2)
cout << i << ' ';
打擂台
寻找最大值、最小值
第一行,输入一个整数 n
第二行,输入 n 个数
输出 n 个数中的最大值和最小值
int maxn = -2e9, minn = 2e9, n, x;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x;
if (x > maxn) maxn = x;
if (x < minn) minn = x;
// 这里的maxn, minn,动态维护着前i个数最值
}
cout << maxn << ' ' << minn;
// 也可以这样写
int maxn = -2e9, minn = 2e9, n, x;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x;
maxn = max(maxn, x);
minn = min(minn, x);
}
cout << maxn << ' ' << minn;