1 条题解
-
0
#include <iostream> using namespace std; // [1] 全局变量定义:基础数组+统计变量,替代局部容器,供全函数调用 int nums[4]; // 全局基础int数组,存储每组待运算的4个数字(核心修改点) int n; // 测试组数 int count = 0;// 统计能算出24的组数,初始为0 // 深度优先搜索函数:判断4个数字按顺序运算能否得到24(参数简化,直接用全局nums数组) // pos-当前处理的数字索引,current-当前累计运算结果 bool dfs(int pos, long long current) { // [7] 递归终止条件:4个数字全部按顺序运算完毕 if (pos == 4) { // [8] 判断最终运算结果是否为24,是则返回真,否则返回假 return current == 24; } // [9] 尝试加法运算:处理下一个数字,累计结果加上当前数字 if (dfs(pos + 1, current + nums[pos])) { return true; } // [10] 尝试减法运算:处理下一个数字,累计结果减去当前数字 if (dfs(pos + 1, current - nums[pos])) { return true; } // [11] 尝试乘法运算:处理下一个数字,累计结果乘以当前数字 if (dfs(pos + 1, current * nums[pos])) { return true; } // [12] 三种运算均尝试,无法得到24,返回假 return false; } int main() { // [2] 输入测试组数 cin >> n; // [3] 循环处理每组测试数据,共n组 for (int i = 0; i < n; i++) { // [4] 循环输入每组的4个数字,存入全局基础数组nums for (int j = 0; j < 4; j++) { cin >> nums[j]; } // [5] 启动深搜:从第1个数字(索引1)开始,初始累计结果为第0个数字,满足则计数+1 if (dfs(1, nums[0])) { count++; } } // [13] 所有组处理完毕,输出能算出24的总组数 cout << count << endl; return 0; }
- 1
信息
- ID
- 1273
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者