> 技术文档 > C++算法竞赛篇(四)八道题带你拿下算法三大循环

C++算法竞赛篇(四)八道题带你拿下算法三大循环


C++算法竞赛篇(四)八道题带你拿下算法三大循环

  • 前言
  • C++循环语句while循环
    • 第一题 反向输出一个四位数
    • 第二题 求和一
    • 第三题 计算多项式的值
  • C++循环语句for循环
    • 第一题 奥运奖牌计数
    • 第二题 救援
    • 第三题 计算分数加减表达式的值
    • 第四题 求分数序列和
  • C++循环语句do while循环
    • 第一题 球弹跳高度的计算

前言

  • 前面我们讲解了C++基础题型和输入输出题型
  • 接下来我们开始讲解下一题型,条件判断题型

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的C++算法竞赛篇文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_13001405.html?spm=1001.2014.3001.5482


C++循环语句while循环

第一题 反向输出一个四位数

C++算法竞赛篇(四)八道题带你拿下算法三大循环

题目链接https://ac.nowcoder.com/acm/contest/18839/1023

解题思路

  1. 输入处理:用 cin 读取四位数 n
  2. 反向输出逻辑:利用 while(n) 循环,通过 n % 10 取最后一位数字输出,再用 n = n / 10 去掉已输出的末位,直到 n 变为 0(所有位处理完毕)。
  3. 输出格式:循环中逐位输出,直接拼接成反向数字。
#include  using namespace std; int main() { int n = 0; cin >> n; while(n) { cout << n % 10; // 取末位输出  n = n / 10; // 去掉末位  } return 0; } 

C++算法竞赛篇(四)八道题带你拿下算法三大循环

第二题 求和一

题目链接https://www.nowcoder.com/practice/ce0b2eacd3d04647831358c2876e44ff

C++算法竞赛篇(四)八道题带你拿下算法三大循环

解题思路

  1. 输入处理:用 cin 读取整数 n
  2. 求和逻辑初始化累加变量 sum0、计数器 i0;通过 while(i <= n) 循环,每次将 i 累加到 sum 并使 i 自增,直到 i 超过 n
  3. 输出格式:循环结束后直接输出 sum
#include  using namespace std; int main() { int n; cin >> n; long long sum = 0; int i=0; while(i<=n) { sum = sum +i; i ++; } cout << sum; } 

C++算法竞赛篇(四)八道题带你拿下算法三大循环

第三题 计算多项式的值

C++算法竞赛篇(四)八道题带你拿下算法三大循环

题目链接https://www.luogu.com.cn/problem/B2080

解题思路

  1. 输入处理:用 cin 读取实数 x 和整数 n
  2. 多项式计算逻辑:初始化 sum=1(对应 x⁰)、r=1(当前项初始值);通过 while(n--) 循环 n 次,每次更新 r = r * x(下一项)并累加到 sum
  3. 输出格式:用 printf(\"%.2f\", sum) 保留两位小数输出。
#include  using namespace std; int main() { int n; double x; cin >> x >> n; double sum=1; double r=1; while (n--) { r = r * x; // 更新当前项为下一项  sum = sum + r; // 累加到总和  } printf(\"%.2f\", sum); return 0; } 

C++算法竞赛篇(四)八道题带你拿下算法三大循环

C++循环语句for循环

第一题 奥运奖牌计数

C++算法竞赛篇(四)八道题带你拿下算法三大循环

题目链接https://www.luogu.com.cn/problem/B2058

解题思路

  1. 输入处理:用 cin 读取届数 n
  2. 统计逻辑:初始化 p1, p2, p3 记录金银铜牌总数;通过 for(int i=1; i<=n; i++) 循环 n 次,每次读取当届奖牌数并累加。
  3. 输出格式:计算总奖牌数 sum = p1+p2+p3,按顺序输出 p1 p2 p3 sum
#include  using namespace std; int a, b, c; int p1, p2, p3; int sum; int main() { int n = 0; cin >> n; for(int i = 1; i <= n; i++) { cin >> a >> b >> c; p1 += a; // 累加金牌  p2 += b; // 累加银牌  p3 += c; // 累加铜牌  } sum = p1 + p2 + p3; cout << p1 << \" \" << p2 << \" \" << p3 << \" \" << sum << endl; return 0; } 

C++算法竞赛篇(四)八道题带你拿下算法三大循环

第二题 救援

C++算法竞赛篇(四)八道题带你拿下算法三大循环

题目链接https://www.luogu.com.cn/problem/B2066

解题思路

  1. 输入处理:用 cin 读取救援点数量 n
  2. 时间计算逻辑:初始化总时间 t=0;通过 for(int i=0; i<n; i++) 循环 n 次,每次读取坐标 (x,y) 和人数 p,计算距离 dis = sqrt(x²+y²),再累加“赶路+救援+返程”时间。
  3. 输出格式:用 ceil(t) 向上取整总时间,转换为 int 输出。
#include  #include  using namespace std; int n; double x, y; int p; int main() { cin >> n; double t = 0; for (int i = 0; i < n; i++) { cin >> x >> y >> p; float dis = sqrt(x * x + y * y); // 赶路时间 + 救援时间 + 返程时间 + 额外救援时间  t += p * 1 + dis / 50 + p * 0.5 + dis / 50; } cout << (int)ceil(t) << endl; // 向上取整并输出  return 0; } 

C++算法竞赛篇(四)八道题带你拿下算法三大循环

第三题 计算分数加减表达式的值

题目链接https://www.luogu.com.cn/problem/B2070

C++算法竞赛篇(四)八道题带你拿下算法三大循环

解题思路

  1. 输入处理:用 cin 读取整数 n
  2. 表达式计算逻辑:初始化 sn=0(累加和)、flag=1(符号标记,初始为正);通过 for(int i=1; i<=n; i++) 循环,每次累加 flag*1.0/i 并翻转 flag 符号。
  3. 输出格式:用 printf(\"%.4f\\n\", sn) 保留四位小数输出。
#include  using namespace std; int main() { int n = 0; double sn = 0; int flag = 1; // 符号标记,1为正,-1为负  cin >> n; for(int i = 1; i <= n; i++) { sn += flag * 1.0 / i; // 累加当前项(带符号)  flag = -flag; // 翻转符号  } printf(\"%.4f\\n\", sn); return 0; } 

C++算法竞赛篇(四)八道题带你拿下算法三大循环

第四题 求分数序列和

题目链接https://www.luogu.com.cn/problem/B2069

解题思路

  1. 输入处理:用 cin 读取整数 n
  2. 序列求和逻辑:初始化 sum=0(累加和)、p=1(分母)、q=2(分子);通过 for(int i=1; i<=n; i++) 循环,每次累加 q*1.0/p,再更新 q = q+p(下一项分子)、p = q-p(下一项分母,即原分子)。
  3. 输出格式:用 printf(\"%.4f\\n\", sum) 保留四位小数输出。
#include  using namespace std; int main() { int n = 0; double sum = 0; double p = 1; double q = 2; cin >> n; for (int i = 1; i <= n; i++) { sum += q / p; // 累加当前项  q = q + p; // 更新分子为“当前分子+分母”  p = q - p; // 更新分母为“原分子”(利用 q 已更新的特性)  } printf(\"%.4f\\n\", sum); return 0; } 

C++算法竞赛篇(四)八道题带你拿下算法三大循环

C++算法竞赛篇(四)八道题带你拿下算法三大循环

C++循环语句do while循环

第一题 球弹跳高度的计算

C++算法竞赛篇(四)八道题带你拿下算法三大循环

题目链接https://www.luogu.com.cn/problem/B2076

解题思路

  1. 输入处理:用 cin 读取初始高度 n(赋值给 h)。
  2. 路程与反弹计算逻辑:初始化 total = h(第一次落地路程)、i=1(计数器);通过 do-while(i <= 9) 循环9次(处理第2~10次落地的反弹-下落),每次更新 h /= 2(反弹高度)并累加 h*2(上去+下落路程)到 total
  3. 输出格式:循环结束后,输出总路程 total 和第10次反弹高度(h / 2)。
#include  using namespace std; int main() { int n = 0; float total = 0; cin >> n; float h = n; total += h; // 第一次落地的路程  int i = 1; do { h /= 2; // 反弹高度  total += h * 2; // 上去+下落的路程  i++; } while (i <= 9); // 循环9次,处理第2~10次落地  cout << total << endl; cout << h / 2 << endl; // 第10次反弹高度  return 0; } 

C++算法竞赛篇(四)八道题带你拿下算法三大循环


以上就是这篇博客的全部内容,下一篇我们将继续探索C++算法的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的C++算法竞赛篇文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_13001405.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述