news 2026/7/3 5:02:02

24点计算器源码(C语言 + C++语言)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
24点计算器源码(C语言 + C++语言)

一 C语言源码

#include <stdio.h> #include <stdlib.h> #include <math.h> #define EPS 1e-6 #define TARGET 24 // 四则运算计算 double calc(double a, double b, int op) { switch(op) { case 0: return a + b; case 1: return a - b; case 2: return a * b; case 3: if(fabs(b) < EPS) return -999999; // 除零非法 return a / b; default: return 0; } } // 运算符转字符 char getOp(int op) { switch(op) { case 0: return '+'; case 1: return '-'; case 2: return '*'; case 3: return '/'; default: return ' '; } } // 递归全排列(4个数) int vis[4]; int num[4]; int buf[4]; int found = 0; // 枚举3个运算符 op1 op2 op3 void dfsOp(int op1, int op2, int op3) { double a = buf[0], b = buf[1], c = buf[2], d = buf[3]; char o1 = getOp(op1), o2 = getOp(op2), o3 = getOp(op3); double r; // 结构1: ((a o1 b) o2 c) o3 d r = calc(calc(calc(a,b,op1), c, op2), d, op3); if(fabs(r - TARGET) < EPS) { printf("((%d%c%d)%c%d)%c%d = 24\n", (int)a,o1,(int)b,o2,(int)c,o3,(int)d); found = 1; } // 结构2: (a o1 (b o2 c)) o3 d r = calc(calc(a, calc(b,c,op2), op1), d, op3); if(fabs(r - TARGET) < EPS) { printf("(%d%c(%d%c%d))%c%d = 24\n", (int)a,o1,(int)b,o2,(int)c,o3,(int)d); found = 1; } // 结构3: a o1 ((b o2 c) o3 d) r = calc(a, calc(calc(b,c,op2), d, op3), op1); if(fabs(r - TARGET) < EPS) { printf("%d%c((%d%c%d)%c%d) = 24\n", (int)a,o1,(int)b,o2,(int)c,o3,(int)d); found = 1; } // 结构4: a o1 (b o2 (c o3 d)) r = calc(a, calc(b, calc(c,d,op3), op2), op1); if(fabs(r - TARGET) < EPS) { printf("%d%c(%d%c(%d%c%d)) = 24\n", (int)a,o1,(int)b,o2,(int)c,o3,(int)d); found = 1; } // 结构5: (a o1 b) o2 (c o3 d) r = calc(calc(a,b,op1), calc(c,d,op3), op2); if(fabs(r - TARGET) < EPS) { printf("(%d%c%d)%c(%d%c%d) = 24\n", (int)a,o1,(int)b,o2,(int)c,o3,(int)d); found = 1; } } // 枚举三组运算符组合 0+ 1- 2* 3/ void enumOp() { int o1,o2,o3; for(o1=0;o1<4;o1++) for(o2=0;o2<4;o2++) for(o3=0;o3<4;o3++) dfsOp(o1,o2,o3); } // 回溯生成4数字全排列 void dfsNum(int step) { int i; if(step == 4) { enumOp(); return; } for(i=0;i<4;i++) { if(!vis[i]) { vis[i] = 1; buf[step] = num[i]; dfsNum(step+1); vis[i] = 0; } } } int main() { int i; printf("==== C语言24点计算器 ====\n"); printf("请输入4个数字(空格隔开): "); for(i=0;i<4;i++) { scanf("%d", &num[i]); } printf("========================\n"); // 初始化标记 for(i=0;i<4;i++) vis[i] = 0; found = 0; dfsNum(0); if(!found) { printf("该组数字无法算出24点!\n"); } return 0; }

二 C++语言源码

#include <iostream> #include <vector> #include <set> #include <cmath> #include <iomanip> using namespace std; const double EPS = 1e-6; const int TARGET = 24; // 运算符:0+ 1- 2* 3/ const char opChar[] = {'+', '-', '*', '/'}; // 四则运算函数 double calculate(double a, double b, int op) { switch (op) { case 0: return a + b; case 1: return a - b; case 2: return a * b; case 3: if (fabs(b) < EPS) return -9999999; // 除零直接返回非法值 return a / b; default: return 0; } } // 遍历5种括号结构,验证是否等于24,存入结果集合去重 void checkAllFormat(double n1, double n2, double n3, double n4, int o1, int o2, int o3, set<string>& res) { char c1 = opChar[o1], c2 = opChar[o2], c3 = opChar[o3]; double val; // 结构1: ((a o1 b) o2 c) o3 d val = calculate(calculate(calculate(n1, n2, o1), n3, o2), n4, o3); if (fabs(val - TARGET) < EPS) { string s = "((" + to_string((int)n1) + c1 + to_string((int)n2) + ")" + c2 + to_string((int)n3) + ")" + c3 + to_string((int)n4); res.insert(s); } // 结构2: (a o1 (b o2 c)) o3 d val = calculate(calculate(n1, calculate(n2, n3, o2), o1), n4, o3); if (fabs(val - TARGET) < EPS) { string s = "(" + to_string((int)n1) + c1 + "(" + to_string((int)n2) + c2 + to_string((int)n3) + "))" + c3 + to_string((int)n4); res.insert(s); } // 结构3: a o1 ((b o2 c) o3 d) val = calculate(n1, calculate(calculate(n2, n3, o2), n4, o3), o1); if (fabs(val - TARGET) < EPS) { string s = to_string((int)n1) + c1 + "((" + to_string((int)n2) + c2 + to_string((int)n3) + ")" + c3 + to_string((int)n4) + ")"; res.insert(s); } // 结构4: a o1 (b o2 (c o3 d)) val = calculate(n1, calculate(n2, calculate(n3, n4, o3), o2), o1); if (fabs(val - TARGET) < EPS) { string s = to_string((int)n1) + c1 + "(" + to_string((int)n2) + c2 + "(" + to_string((int)n3) + c3 + to_string((int)n4) + "))"; res.insert(s); } // 结构5: (a o1 b) o2 (c o3 d) val = calculate(calculate(n1, n2, o1), calculate(n3, n4, o3), o2); if (fabs(val - TARGET) < EPS) { string s = "(" + to_string((int)n1) + c1 + to_string((int)n2) + ")" + c2 + "(" + to_string((int)n3) + c3 + to_string((int)n4) + ")"; res.insert(s); } } // 枚举3个运算符组合 void enumOperator(vector<double> nums, set<string>& ansSet) { for (int o1 = 0; o1 < 4; o1++) for (int o2 = 0; o2 < 4; o2++) for (int o3 = 0; o3 < 4; o3++) checkAllFormat(nums[0], nums[1], nums[2], nums[3], o1, o2, o3, ansSet); } // 回溯生成4个数全排列 void permute(vector<int>& src, vector<double>& cur, vector<bool>& vis, set<string>& ans) { if (cur.size() == 4) { enumOperator(cur, ans); return; } for (int i = 0; i < 4; i++) { if (!vis[i]) { vis[i] = true; cur.push_back((double)src[i]); permute(src, cur, vis, ans); cur.pop_back(); vis[i] = false; } } } int main() { cout << "==== C++ 24点计算器 ====" << endl; vector<int> num(4); cout << "请输入4个数字,空格分隔:"; for (int i = 0; i < 4; i++) cin >> num[i]; set<string> answer; vector<double> temp; vector<bool> used(4, false); permute(num, temp, used, answer); cout << "========================" << endl; if (answer.empty()) { cout << "该组数字无法计算出24点!" << endl; } else { cout << "共找到 " << answer.size() << " 种解法:" << endl; for (auto& expr : answer) cout << expr << " = 24" << endl; } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 4:57:03

专利代理师:我国三大诉讼完整对比详解(适配专利代理师《相关法律知识》备考)

一、一句话秒判口诀民告民、借钱买卖侵权离婚 → 民事诉讼 民告官、不服处罚 / 许可 / 国知局决定 → 行政诉讼 检告人、追究犯罪判刑坐牢 → 刑事诉讼 我国只有三类独立诉讼&#xff0c;其余均为衍生特殊案件&#xff0c;不是第四类诉讼。二、三大诉讼核心对比表对比项目民事诉…

作者头像 李华
网站建设 2026/7/3 4:56:14

我把祖传Java项目重构后,接口响应从3s砍到了200ms,只改了这几行代码

前言&#xff1a;祖传老项目的性能噩梦 做 Java 开发的程序员&#xff0c;大概率都接手过祖传老旧项目。这类项目普遍有几个典型特征&#xff1a;代码混乱无规范、嵌套冗余严重、数据库操作野蛮粗暴、无缓存、无异步、无性能监控&#xff0c;靠着“能跑就行”的准则苟活数年&a…

作者头像 李华
网站建设 2026/7/3 4:56:08

【计算机Java毕业设计案例】基于 SpringBoot 的社区共享图书馆运维管理系统的设计与实现 基于 SpringBoot 的 “图书森林” 图书捐赠与共享管理系统(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/3 4:55:30

硅胶密封件亲测:2026年7月实战推荐

在2026年7月的生产一线&#xff0c;硅胶密封件的质量仍然是众多小家电、灯具及自动化设备企业的心头之痛。数据显示&#xff0c;因密封件老化开裂、尺寸误差大导致的设备返修率&#xff0c;在某些高频运转产线中高达15%以上。劣质原料在60℃以上持续发热环境中&#xff0c;变形…

作者头像 李华
网站建设 2026/7/3 4:55:03

AI落地失败90%因数据问题:数据质量与特征工程实战指南

1. 这不是一篇讲“AI有多厉害”的空泛文章&#xff0c;而是一份数据工程师和算法负责人在凌晨三点改完第7版数据清洗脚本后&#xff0c;摔下键盘说的真话“Towards Artificial Intelligence — Overcoming Data Challenges”——这个标题乍看像学术会议海报上的一行副标题&…

作者头像 李华