算24

    xiaoxiao2021-03-26  63

    算24

    输入

    数据包括多行,每行给出一组测试数据,包括4个小于10个正整数。 最后一组测试数据中包括4个0,表示输入的结束,这组数据不用处理。

    输出

    对于每一组测试数据,输出一行,如果可以得到24,输出“YES”; 否则,输出“NO”。

    样例输入

    5 5 5 1

    1 1 4 2

    0 0 0 0

    样例输出

    YES

    NO

    分析:

    n个数算24,必有两个数要先算。这两个数算的结果,和剩余n-2个数,就构 成了n-1个数求24的问题

    枚举先算的两个数,以及这两个数的运算方式。 边界条件:一个数算24 注意:浮点数比较是否相等,不能用 ==

    #include <iostream> #include <cmath> using namespace std; #define ESP 1e-9 double a[5]; bool IsZero(double x) { return fabs(x) < ESP; } bool count24(double a[], int n) {//用数组a中的n个数计算24 if(n == 1) { if( IsZero(a[0] - 24)) return true; else return false; } double b[5]; for(int i=0; i<n-1; i++) { for(int j=i+1; j<n; j++) {//枚举两个数的组合 int m=0;//还剩m个数, m = n -2 for(int k=0; k<n; k++) { if(k != i && k != j) b[m++] = a [k];//把其余数放入b中 } b[m] = a[i] + a[j]; if(count24(b, m+1)) return true; b[m] = a[i] - a[j]; if(count24(b, m+1)) return true; b[m] = a[j] - a[i]; if(count24(b, m+1)) return true; b[m] = a[i] * a[j]; if(count24(b, m+1)) return true; if( a[j]) { b[m] = a[i] / a[j]; if(count24(b, m+1)) return true; } if( a[i]) { b[m] = a[j] / a[i]; if(count24(b, m+1)) return true; } } } return false; } int main() { while(true) { for(int i=0; i<4; i++) cin >> a[i]; if( IsZero(a[0])) break; if( count24(a, 4)) cout << "YES" << endl; else cout << "NO" <<endl; } return 0; } ReCclay 认证博客专家 嵌入式软件开发 机器/深度学习 全栈技术学习者 大家好,我是博主ReCclay,目前处于研究生阶段,就读于电子科技大学,主攻方向为汽车辅助驾驶算法研究。入站以来,凭借坚持与热爱,以博文的方式分享所学,截止目前累计博文数量达800余篇,累计受益人次达130w+次,涉及领域包括但不限于物联网开发、单片机开发、Linux驱动开发、FPGA开发、前/后端软件开发等。在未来我将继续专注于嵌入式相关领域,学习更多的科技知识,输出更高质量的博文。
    转载请注明原文地址: https://ju.6miu.com/read-600236.html

    最新回复(0)