poj 1348 Computing (四个数的加减乘除四则运算)
http://poj.org/problem?id=1348
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 1681 | Accepted: 248 |
Description
Input
Output
Sample Input
- 1 2 3 4 50
- 2 3 10 1 61
- -1
Sample Output
- 1 2 3 4 50 NO!
- 2 3 10 1 61 OK!
Source
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- #include<algorithm>
- using namespace std;
- struct Nod
- {
- int son; //分子
- int mon; //分母
- }num[]; //以 分子/分母 形式保存一个数
- void getNum(int *a) //将a数组转换成 分子/分母 形式
- {
- int i;
- for(i=;i<;i++)
- {
- num[i].son = a[i];
- num[i].mon = ;
- }
- }
- Nod operate(Nod a,Nod b,int ch) //进行四则运算
- {
- Nod temp;
- if(ch==) // '+'
- {
- temp.mon = a.mon * b.mon;
- temp.son = a.son * b.mon + b.son * a.mon;
- }
- else if(ch==) // '-'
- {
- temp.mon = a.mon * b.mon;
- temp.son = a.son * b.mon - b.son * a.mon;
- }
- else if(ch==) // '*'
- {
- temp.mon = a.mon * b.mon;
- temp.son = a.son * b.son;
- }
- else if(ch==) // '/'
- {
- temp.mon = a.mon * b.son;
- temp.son = b.mon * a.son;
- }
- return temp;
- }
- int computing(int *a,int e)
- {
- getNum(a); //获得 分子/分母 的表示方式
- Nod temp1,temp2,temp3;
- int i,j,k;
- // ((a#b)#c)#d '#'号代表运算符号
- for(i=;i<;i++)
- {
- temp1 = operate(num[],num[],i);
- if(temp1.mon == ) continue; //分母为0情况
- for(j=;j<;j++)
- {
- temp2 = operate(temp1,num[],j);
- if(temp2.mon == ) continue;
- for(k=;k<;k++)
- {
- temp3 = operate(temp2,num[],k);
- if(temp3.mon == ) continue;
- if(temp3.son%temp3.mon==&&temp3.son/temp3.mon==e) return ;
- }
- }
- }
- //(a#(b#(c#d)))
- for(i=;i<;i++)
- {
- temp1 = operate(num[],num[],i);
- if(temp1.mon == ) continue;
- for(j=;j<;j++)
- {
- temp2 = operate(num[],temp1,j);
- if(temp2.mon == ) continue;
- for(k=;k<;k++)
- {
- temp3 = operate(num[],temp2,k);
- if(temp3.mon == ) continue;
- if(temp3.son%temp3.mon==&&temp3.son/temp3.mon==e) return ;
- }
- }
- }
- //(a#b)#(c#d)
- for(i=;i<;i++)
- {
- temp1 = operate(num[],num[],i);
- if(temp1.mon == ) continue;
- for(j=;j<;j++)
- {
- temp2 = operate(num[],num[],j);
- if(temp2.mon == ) continue;
- for(k=;k<;k++)
- {
- temp3 = operate(temp1,temp2,k);
- if(temp3.mon == ) continue;
- if(temp3.son%temp3.mon==&&temp3.son/temp3.mon==e) return ;
- }
- }
- }
- return ;
- }
- int main()
- {
- int a[],e;
- while(~scanf("%d",&a[])&&a[]!=-)
- {
- scanf("%d%d%d%d",&a[],&a[],&a[],&e);
- int i,j;
- for(j=;j<;j++) printf("%d ",a[j]);
- for(i=;i<;i++)
- {
- if(computing(a,e) == ) break;
- next_permutation(a,a+); //获取下一个字典序
- }
- printf("%d ",e);
- if(i<) puts("OK!");
- else puts("NO!");
- }
- return ;
- }
poj 1348 Computing (四个数的加减乘除四则运算)的更多相关文章
- Qt之加减乘除四则运算-支持负数
一.效果展示 如图1所示,是简单的四则运算测试效果,第一列为原始表达式,第二列为转换后的后缀表达式,冒号后为结果.表达式支持负数和空格,图中是使用了5组测试数据,测试结果可能不全,如大家发现算法有问题 ...
- java课后作业 弹出窗口求两个数的加减乘除
//计算2个数的加减乘除 谷伟华 2015/10/6package jisuan; import javax.swing.JOptionPane; public class Jiasuan { pub ...
- lintcode:四个数之和
题目 四数之和 给一个包含n个数的整数数组S,在S中找到所有使得和为给定整数target的四元组(a, b, c, d). 样例 例如,对于给定的整数数组S=. 满足要求的四元组集合为: (-1, 0 ...
- js jq 手机号实现(344) 附带删除功能 jq 实现银行卡没四个数加一个空格 附带删除功能
js 手机号实现(344) 下面有将正则验证去掉“-” 或“空格” 下一篇博客有单独的删除功能方法 <!DOCTYPE html> <head> <meta char ...
- Python基础算法综合:加减乘除四则运算方法
#!usr/bin/env python# -*- coding:utf-8 -*-#python的算法加减乘除用符号:+,-,*,/来表示#以下全是python2.x写法,3.x以上请在python ...
- java实现超大整数加减乘除四则运算
原理: 用数组存储数字,按照计算法则进行运算. 代码: package com.hdwang; import java.util.regex.Matcher; import java.util.reg ...
- poj 1144(求割点个数)
题目链接:http://poj.org/problem?id=1144 思路:判断一个点是否是割点的两个条件:1.如果一个点v是根结点并且它的子女个数大于等于2,则v是割点.2.如果点v不是根结点,并 ...
- Java位运算实现加减乘除四则运算
本文是继<一文了解有趣的位运算>的第二篇文章. 我们知道,计算机最基本的操作单元是字节(byte),一个字节由8个位(bit)组成,一个位只能存储一个0或1,其实也就是高低电平.无论多么复 ...
- 位运算实现加减乘除四则运算(Java)
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 本文是继< ...
随机推荐
- Forwarding a Range of Ports in VirtualBox
STAN SCHWERTLY MAY 9, 2012 ARTICLES 3 COMMENTS Doesn't allow forwarding a range of ports through the ...
- opencv拼接相关1
这里面都是一些比较杂的东西,没什么实际意义.主要是为了,后面能跑一个程序: Stitcher: 抠细节: http://docs.opencv.org/2.4.2/modules/stitching/ ...
- C语言里的文件函数
1.File *pf = fopen("文件名","打开方式"); 文件名可以加路径,两个"\\"或者一个"/" 打开方 ...
- 介绍一些适用于 Web 开发者的 Atom 编辑器插件
Atom 的社区很繁荣,有着丰富的扩展/插件(packages).安装 Atom 的 Package 非常简单,可以在编辑器的偏好设置里面安装,也可以在命令行中使用 apm 命令来安装. 在介绍适用于 ...
- ssh 安全配置
1.只使用ssh v2 //etc/ssh/sshd_cofig Protocol 2 ListenAddress x.x.x.x --如果你的环境有VPN通道,建议sshd监听所在的内网地址: 2 ...
- uiatuomator提示shortMsg=java.lang.RuntimeException
自动化要做断言,原本打算使用的testng,因为它断言后就能出结果,还能生成报告,但是在实践过程中,硬是没有成功,所以还是放弃,使用的junit,后面使用的cts框架生成的邮件,现在记录使用junit ...
- $GLOBALS['HTTP_RAW_POST_DATA']、$_POST和php://input深入探究三者的区别
$_POST:通过 HTTP POST 方法传递的变量组成的数组.是自动全局变量. $GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变 ...
- spring的依赖注入的最常见的两种方法
package com.lsz.spring.action; public class User { /** * set注入 */ private String username; public vo ...
- C# 打印多页tif
注意点: 1.计算image对象总页数 image.GetFrameCount(FrameDimension.Page); 2.初始化当前页,并获取指定页内容 image.SelectActiveFr ...
- UISearchController的使用。(iOS8+)
这种方法早就发现了,不过一致没用,今天拿过来用,发现了一些问题. 1.这个东西和表视图结合使用很方便,首先,创建新的工程,将表视图控制器作为工程的根视图,并且添加一个导航(当然,你可以不这样做,但是你 ...