运算出分数的算24
来源:互联网 发布:linux 删除多个文件夹 编辑:程序博客网 时间:2024/06/05 17:35
描述:
算24的一个经典例子是5 5 5 1,在中间结果可以出现分数的情况下是有解的。(5-1/5)*5
在允许中间结果是分数的情况下,如何编写一个算24的程序。
输入:
4个1~13之间的整数。
输出:
在允许中间结果是分数的情况下,能得到24输出“Yes”,否则输出“No”。
输入样例:
5 5 5 1
输出样例:
Yes
题目要求 1. 除数不为0
2.运算结果可以出现分数
#include<iostream>
#include<math.h>
#include<stdlib.h>
using namespace std
int a[4] = {0} ;
int b[4] = {0} ;
int used[4] = {0} ;
int flag = 0 ;
void search(int m) ;
void judge() ;
double cal(double e , int f , double g) ;
int main()
{
int i ;
for(i = 0 ; i <= 3 ; i++)
{
cin >> b[i] ;//用b[4]这个数组存储输入的四个数
}
search(0) ;
if(flag == 1)
{
cout << "Yes" << endl ;
}
if(flag == 0)
{
cout << "No" << endl ;
}
}
void search(int m)
{ int i ;
if(m == 4)
{
judge() ;
}
for(i = 0 ; i <= 3 ; i++)
{
if(used[i] == 0)
{
a[m] = b[i] ;//a[4]这个数组是对b[4]这个数组进行重新的排列
used[i] = 1 ;
search(m + 1) ;
used[i] = 0;
}
}
}
void judge()
{
int i , j , k , l ;//i是运算顺序 j,k,l是运算符 temp1 , temp2 是中间两次运算的结果
double n , m , q ;
for(i = 0 ; i <= 4 ; i++)
{
if(i == 0)//1 2 3
{
for(j = 0 ; j < 4 ; j++)
{
if(j == 3 && a[1] == 0 )
{
continue ;
}
n = cal(a[0] , j , a[1]) ;
for(k = 0 ; k < 4 ; k++)
{
if(k == 3 && a[2] == 0 )
{
continue ;
}
m = cal(n , k , a[2]) ;
for(l = 0 ; l < 4 ; l++)
{
if(l == 3 && a[3] == 0 )
{
continue ;
}
q = cal(m , l , a[3]) ;
if( fabs(q-24) < 0.000001)
{
flag = 1 ;
}
}
}
}
}
if(i == 1)//1 3 2
{
for(j = 0 ; j < 4 ; j++)
{
if(j == 3 && a[1] == 0 )
{
continue ;
}
n = cal(a[0] , j , a[1]) ;
for(k = 0 ; k < 4 ; k++)
{
if(k == 3 && a[3] == 0 )
{
continue ;
}
m = cal(a[2] , k , a[3]) ;
for(l = 0 ; l < 4 ; l++)
{
if(l == 3 && m == 0 )
{
continue ;
}
q = cal(n , l , m) ;
if( fabs(q -24) <0.000001 );//因为浮点数计算的时候会有误差,所以这样相当于检验q是否与24相等
{
flag = 1 ;
}
}
}
}
}
if(i == 2)//2 1 3
{
for(j = 0 ; j < 4 ; j++)
{
if(j == 3 && a[2] == 0 )
{
continue ;
}
n = cal(a[1] , j , a[2]) ;
for(k = 0 ; k < 4 ; k++)
{
if(k == 3 && n == 0 )
{
continue ;
}
m = cal(a[0] , k , n) ;
for(l = 0 ; l < 4 ; l++)
{
if(l == 3 && a[3] == 0 )
{
continue ;
}
q = cal (m , l , a[3]) ;
if( fabs(q-24)<0.000001)
{
flag = 1 ;
}
}
}
}
}
if(i == 3)//2 3 1
{
for(j = 0 ; j < 4 ; j++)
{
if(j == 3 && a[2] == 0 )
{
continue ;
}
n = cal(a[1] , j , a[2]) ;
for(k = 0 ; k < 4 ; k++)
{
if(k == 3 && a[3] == 0 )
{
continue ;
}
m = cal(n , k , a[3]) ;
for(l = 0 ; l < 4 ; l++)
{
if(l == 3 && m == 0)
{
continue ;
}
q = cal(a[0] , l , m) ;
if( fabs(q-24)<0.000001)
{
flag = 1 ;
}
}
}
}
}
if(i == 4)//3 2 1
{
for(j = 0 ; j < 4 ; j++)
{
if(j == 3 && a[3] == 0 )
{
continue ;
}
n = cal(a[2] , j , a[3]) ;
for(k = 0 ; k < 4 ; k++)
{
if(k == 3 && n == 0 )
{
continue ;
}
m = cal(a[1] , k , n) ;
for(l = 0 ; l < 4 ; l++)
{
if(l == 3 && m == 0 )
{
continue ;
}
q = cal(a[0] , l , m) ;
if( fabs(q-24)<0.000001 )
{
flag = 1 ;
}
}
}
}
}
}
}
double cal(double e , int f , double g)
{
if(f == 0)
{
return (e+g) ;
}
if(f == 1)
{
return (e-g) ;
}
if(f == 2)
{
return (e*g) ;
}
if(f == 3)
{
return (e*1.0/g) ;
}
}
- 运算出分数的算24
- 分数的运算
- 分数的各种运算
- 分数的各种运算
- 分数的各种运算
- 分数的各种运算
- 分数的运算表达
- 分数的加减乘除运算
- 如何算出两个日期之间相隔的月分数
- 分数运算符的重载
- 分数的运算符重载
- java 10.23 (分数的运算)
- 分数加减的简单运算
- 分数的运算符重载
- 分数运算
- 分数运算
- 分数运算
- 分数运算
- 修改eclipse背景色
- 混合开发笔记
- spark搭建
- LightOJ
- 1001. 害死人不偿命的(3n+1)猜想 (15)
- 运算出分数的算24
- FM的快速增量算法猜想
- 深入理解c++中public,protected,private用法
- list和set的区别
- 【莫比乌斯反演】51Nod 1678 lyk与gcd
- Logcat遇到的问题
- 课程设计ASp.NET MVC5 Blog架构
- 1404 检查金币 DFS(水题)
- c++中自定义类型和内置类型,变量自增自减的差异