C++ 编程题:转向游戏 II - 方向感大挑战
转向游戏 II - 方向感大挑战/n/n## 题目描述/n/n小明自认为方向感很好,请小红来测试。小红先让小明面对'东'方立正站好,然后发出 '向左转'、'向右转' 或 '向后转' 的命令。每个命令执行后,小明都正确地说出了他面对的方向。/n命令是以数字方式表达:$0$ 代表 '向右转',$1$ 代表 '向左转',$2$ 代表 '向后转'。/n/n## 输入格式/n/n从标准输入读入数据。/n输入共两行。第一行是一个正整数 $n$($1//le n//le 10,000$),代表命令的条数;第二行是 $n$ 个整数,每个整数是 $0$、$1$ 或 $2$,代表小红发出的口令。/n/n## 输出格式/n/n输出到标准输出。/n一个整数,代表小明回答 '北' 的次数。/n/n## 样例 #1/n/n### 样例输入 #1/n/n/n5/n0 1 0 0 1/n/n/n### 样例输出 #1/n/n/n0/n/n/n## 提示/n/n## 子任务/n对于 $30/%$ 的数据,$n//le10$;/n对于 $50/%$ 的数据,$n//le100$;/n对于 $70/%$ 的数据,$n//le1,000$;/n对于 $100/%$ 的数据,$n//le10,000$。/n特别地,对于其中 $20/%$ 的数据,小红发出的命令仅有一种。/n/n## C++ 代码/n/ncpp/n#include <iostream>/nusing namespace std;/n/nint main() {/n int n, ans = 0, direction = 0;/n cin >> n;/n while (n--) {/n int command;/n cin >> command;/n if (command == 0) {/n direction = (direction + 1) % 4;/n }/n else if (command == 1) {/n direction = (direction + 3) % 4;/n }/n else {/n direction = (direction + 2) % 4;/n }/n if (direction == 0) {/n ans++;/n }/n }/n cout << ans << endl;/n return 0;/n}/n/n/n代码解析:/n/n1. 使用一个变量 direction 来表示小明当前面对的方向,初始化为 0 代表 '东'。/n2. 循环遍历所有命令,根据命令进行相应的转向操作。/n3. 每个命令对应一个 direction 的变化,使用模运算 % 4 保证 direction 的值始终在 0 到 3 之间,分别对应 '东'、'南'、'西'、'北'。/n4. 判断 direction 是否为 0,如果是则代表小明面对 '北',答案 ans 加 1。/n5. 最后输出 ans 的值。/n/n解题思路:/n/n1. 使用一个变量来存储小明当前面对的方向。/n2. 循环遍历所有命令,根据命令更新小明面对的方向。/n3. 判断小明面对的方向是否为 '北',如果是则统计次数。/n/n代码优化:/n/n可以使用 switch 语句代替 if-else 语句,使代码更加简洁。/n/ncpp/n#include <iostream>/nusing namespace std;/n/nint main() {/n int n, ans = 0, direction = 0;/n cin >> n;/n while (n--) {/n int command;/n cin >> command;/n switch (command) {/n case 0:/n direction = (direction + 1) % 4;/n break;/n case 1:/n direction = (direction + 3) % 4;/n break;/n case 2:/n direction = (direction + 2) % 4;/n break;/n }/n if (direction == 0) {/n ans++;/n }/n }/n cout << ans << endl;/n return 0;/n}/n/n/n提交代码:/n/n将上述代码复制到你的代码编辑器中,保存为 .cpp 文件,然后提交到编程平台。/n/n祝你编程愉快!
原文地址: https://www.cveoy.top/t/topic/knbt 著作权归作者所有。请勿转载和采集!