目录😋
[1. 基本原理](#1. 基本原理)
[2. 示例代码](#2. 示例代码)
[1. 基本原理](#1. 基本原理)
[2. 示例代码(求两个数的 GCD)](#2. 示例代码(求两个数的 GCD))
[3. 示例代码(求三个数的 LCM)](#3. 示例代码(求三个数的 LCM))
[4. 使用示例](#4. 使用示例)
[三、循环控制 / 跳转语句的使用](#三、循环控制 / 跳转语句的使用)
[1. 循环控制语句(for 循环)](#1. 循环控制语句(for 循环))
[2. 循环控制语句(while 循环)](#2. 循环控制语句(while 循环))
[3. 跳转语句(break 语句)](#3. 跳转语句(break 语句))
[4. 跳转语句(continue 语句)](#4. 跳转语句(continue 语句))
任务描述
**本关任务:**有 A、B、C 三艘军舰同时开始鸣放礼炮各21响。已知 A 舰每隔5秒1次,B 舰每隔6秒放1次,C 舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。
相关知识
为了完成本关任务,你需要掌握:
- 军舰鸣放礼炮的时间间隔计算;
- 三艘军舰的礼炮声重叠(重合)计算;
- 循环控制/跳转语句的使用。
一、军舰鸣放礼炮的时间间隔计算
1. 基本原理
- 假设军舰鸣放礼炮的频率是固定的,例如一艘军舰每隔固定的秒数鸣放一次礼炮。如果我们知道礼炮鸣放的总时长和每次鸣放的间隔时间,就可以计算出总共鸣放的次数。在 C 语言中,可以使用简单的算术运算来实现。
- 例如,礼炮总时长为
total_time
秒,每次鸣放间隔为interval
秒,那么鸣放次数num_fires
可以通过公式num_fires = total_time/interval + 1
(如果总时长刚好是间隔时间的整数倍,需要加 1 才能得到正确的次数)来计算。2. 示例代码
cpp#include <stdio.h> int main() { int total_time = 60; // 总时长(秒) int interval = 5; // 间隔时间(秒) int num_fires = total_time/interval + 1; printf("礼炮鸣放次数为:%d\n", num_fires); return 0; }
二、三艘军舰的礼炮声重叠(重合)计算
1. 基本原理
- 对于三艘军舰鸣放礼炮的情况,假设每艘军舰的礼炮鸣放间隔分别为
interval1
、interval2
和interval3
。要找到它们礼炮声重叠的时间点,就需要找到这三个间隔时间的最小公倍数(LCM)。在 C 语言中,可以通过辗转相除法先求两个数的最大公因数(GCD),然后利用公式LCM(a, b)=a*b/GCD(a, b)
来计算两个数的最小公倍数,再逐步扩展到三个数。2. 示例代码(求两个数的 GCD)
cppint gcd(int a, int b) { if (b == 0) { return a; } return gcd(b, a % b); }
3. 示例代码(求三个数的 LCM)
cppint lcm(int a, int b, int c) { int ab_lcm = a * b / gcd(a, b); return ab_lcm * c / gcd(ab_lcm, c); }
4. 使用示例
cpp#include <stdio.h> int main() { int interval1 = 4; int interval2 = 6; int interval3 = 8; int overlap_time = lcm(interval1, interval2, interval3); printf("礼炮声重叠的间隔时间为:%d秒\n", overlap_time); return 0; }
三、循环控制 / 跳转语句的使用
1. 循环控制语句(for 循环)
基本原理 :
for
循环是一种常用的循环结构,它允许您指定一个初始化表达式、一个循环条件和一个更新表达式。语法格式为for(初始化表达式; 循环条件; 更新表达式)
。初始化表达式在循环开始时执行一次,用于初始化循环变量。循环条件在每次循环迭代开始时进行检查,如果为真,则执行循环体中的代码。更新表达式在每次循环体执行完后执行,用于更新循环变量。示例代码
cpp#include <stdio.h> int main() { // 打印1到10的数字 for (int i = 1; i <= 10; i++) { printf("%d ", i); } printf("\n"); return 0; }
2. 循环控制语句(while 循环)
基本原理 :
while
循环在循环开始时检查循环条件。只要条件为真,就会执行循环体中的代码。语法格式为while(循环条件)
。循环条件是一个表达式,它返回一个布尔值(真或假)。在循环体中,通常需要包含一些能够改变循环条件的语句,否则可能会导致无限循环。示例代码
cpp#include <stdio.h> int main() { int i = 1; while (i <= 10) { printf("%d ", i); i++; } printf("\n"); return 0; }
3. 跳转语句(break 语句)
基本原理 :
break
语句用于立即跳出当前循环(for
、while
、do - while
)或switch
语句。当程序执行到break
语句时,循环或switch
语句会立即终止,程序控制流将跳转到循环或switch
语句后的下一条语句。示例代码(在循环中使用 break)
cpp#include <stdio.h> int main() { for (int i = 1; i <= 10; i++) { if (i == 5) { break; } printf("%d ", i); } printf("\n"); return 0; }
4. 跳转语句(continue 语句)
基本原理 :
continue
语句用于跳过当前循环迭代的剩余部分,直接开始下一次循环迭代。当程序执行到continue
语句时,循环体中continue
语句之后的代码将不会被执行,而是直接跳转到循环的更新表达式(对于for
循环)或循环条件检查(对于while
和do - while
循环)。示例代码(在循环中使用 continue)
cpp#include <stdio.h> int main() { for (int i = 1; i <= 10; i++) { if (i == 5) { continue; } printf("%d ", i); } printf("\n"); return 0; }
编程要求
根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。
测试说明
平台会对你编写的代码进行测试:
预期输出:
cppn=54
开始你的任务吧,祝你成功!
通关代码
cpp
/*10. 在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。假设各炮手对时间的掌握非常准确,请编程计算观众总共以听到几次礼炮声。*/
#include <stdio.h>
main(){
int n=0,t;
/************************begin***********************/
int a = 0,b = 0, c = 0;
for(t = 1;t <= 21 * 7;t++){
if(t % 5 == 0 && t<=21 * 5){
a++;
}
if(t % 6 == 0 && t<=21 * 6){
b++;
}
if(t % 7 == 0 && t<=21 * 7){
c++;
}
if(a > 0 && b > 0 && c > 0){
n++;
a--;
b--;
c--;
}else if(a > 0 && b > 0){
n++;
a--;
b--;
}else if(a > 0 && c > 0){
n++;
a--;
c--;
}else if(b > 0 && c > 0){
n++;
b--;
c--;
}else if(a+b+c==1){
n++;
a=0;
b=0;
c=0;
}
}
/************************end************************/
printf("n=%d\n",n);
}