import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
 * @author Administrator
 * @常发均
 */
public class Demo {
boolean flag=false;
HashMap<Integer,HashMap<Integer, Integer>> total=new HashMap<Integer,HashMap<Integer, Integer>>();
HashMap<Integer, Integer> mathChang=new HashMap<Integer, Integer>();
public static void main(String[] args) {
Demo d=new Demo();
long ll=System.currentTimeMillis();
String str=d.test3();
long lll=System.currentTimeMillis();
System.err.println(ll-lll);
System.out.println(str);

}

public String test3(){
String stri=null;
LinkedHashMap<Integer, Integer> like=test4();//接收规则数字集合
for(Integer b:like.keySet()){
int a=like.get(b);
if(!flag){
int miMax=0;
out:for(int m=0;m>=0;m++){//求出幂函数的最大值
int xx=(int)(Math.pow(b,m));
if(a-xx<0){
miMax=m-1>=0?m-1:0;
break out;
}
}
int ccc=miMax;
this.test6(ccc,miMax,a,b);//调用解析规则数字对
}
else{ //第二组数字集合直接引用第一组所得出的结果
List<Integer> list=new ArrayList<Integer>();
if(total.size()>0){
for(Integer aa:total.keySet()){
int m=0;
for(Integer i:total.get(aa).keySet()){
m+=(int)(total.get(aa).get(i)*Math.pow(b, i));
}
if(m!=a){//如果第二组数字不符合此条过滤,将规律集合中的key存储(因为集合遍历内部不能直接调用remove方法,因此需要几率key值,外面区删)
list.add(aa);
}
}  
if(list.size()>0){//删除不符合其他组数字规律的指数与系数相关的数据
for(int i=0;i<list.size();i++){
total.remove(list.get(i));
}
}
}

}
}
if(total.size()>0){//将符合规律的数字集合保存为字符串
StringBuffer str=new StringBuffer();
for(Integer aa:total.keySet()){
str.append("a=");
for(Integer i:total.get(aa).keySet()){
if(total.get(aa).get(i)!=0){
if(i==0){
str.append(total.get(aa).get(i)+"+");
}
else{
str.append(total.get(aa).get(i)+"*b^"+i+"+");
}
}
}
}
str.delete(str.length()-1,str.length());
stri=new String(str);
}
else{
stri="不符合逻辑";
}
return stri;

}

public LinkedHashMap<Integer, Integer> test4(){//生成规则的一组组数字
LinkedHashMap<Integer, Integer> like=new LinkedHashMap<Integer, Integer>();
like.put(2,2*2*2*2+11*2*5+71);
like.put(3,2*3*3*3+11*3*5+71);
like.put(4,2*4*4*4+11*4*5+71);
like.put(5,2*5*5*5+11*5*5+71);
return like;

}

public void test6(int ccc, int miMax, int a,int b){
if(ccc>=0){ //幂函数的指数大于等于零
for(int i=0;i<=a/Math.pow(b,ccc);i++){//遍历循环当前指数下面的所有系数,并判断边界值
mathChang.put(ccc,i);//将幂函数的指数与系数存入集合
if(flagg(mathChang,ccc,miMax,a,b)){
if(ccc==0){ //递归出口,幂函数指数为0
int m=0;
for(int x=0;x<=miMax;x++){
m+=(int)(mathChang.get(x)*Math.pow(b,x));//算出右边所有值
}
if(a==m){//判断与左边是否相等,如果相等将此组有规律的幂函数指数与系数存入规律集合
HashMap<Integer, Integer> paixu=new HashMap<Integer, Integer>();
for(int mm=0;mm<mathChang.size();mm++){
paixu.put(mm, mathChang.get(mm));
}
flag=true;
total.put(total.size(),paixu);
}
}
else{//递归
this.test6(ccc-1,miMax,a,b);
}
}
}
}
}
/*
* 通过左边的值大于等于右边某一个值或者多个值的和;例:a=b+c;a>=b且a>=c
*/
 public boolean flagg(HashMap<Integer, Integer> mathChang, int ccc,int miMax, int a,int b){
int m=0;
for(int i=miMax;i>=ccc;i--){
m+=(int)(mathChang.get(i)*Math.pow(b,i));
}
return m<=a?true:false;

}

}

java逻辑他推理之公式逆推相关推荐

  1. [剑指offer][JAVA]面试题第[46]题[把数字翻译成字符串][递归][逆推]

    [问题描述][中等] 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l", ...

  2. hdu 3853 LOOPS (概率dp 逆推求期望)

    题目链接 LOOPS Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Tot ...

  3. 小说的逻辑与反逻辑_以理性的数学逻辑构筑推理小说

    亚历克斯·帕维西(Alex Pavesi)出道作<第八个侦探>(美版:The Eighth Detective:英版:Eight Detectives)出版于2020年8月.根据其在麦克米 ...

  4. pmp-关键路径法之顺推和逆推

    下图是系统集成项目管理工程师2019年上半年下午的案例题,这里用来解析关键路径法的顺推和逆推 备注:因为软考的项目管理考纲是采用PMP的教材,所以这里的解析是通用的 专业术语解释: 注意:持续时间也叫 ...

  5. 猴子吃桃的逆推c语言算法,经典算法题每日演练 猴子吃桃

    猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个.第二天早上又将剩下的桃子吃了一半,还是不过瘾又多 吃了一个.以后每天都吃前一天剩下的一半再加一个.到第10天刚好剩一个.问猴子第一天摘了多 ...

  6. 203. 电子编程入门到工程师--逆推原理图(电源部分)

    一.聚焦目标 1. 本课目标: 逆推法完成电源部分. 因为第一次使用逆推法学习开源硬件电路,这节课目标还是集中在最前面的绘制电路图.主要学习逆推学习法的基本步骤.框架,理解其内涵,并逆推学习电路图的一 ...

  7. 【CVPR2020】【逆推】Image Processing Using Multi-Code GAN Prior

    翻到最后有视频版哦~ 论文地址:https://arxiv.org/pdf/1912.07116.pdf 项目地址:https://github.com/genforce/mganprior 文字版 ...

  8. 独辟蹊径:逆推Krpano切图算法,实现在浏览器切多层级瓦片图

    独辟蹊径:逆推Krpano切图算法,实现在浏览器切多层级瓦片图 前言 1.功能简介 2.回顾krpano切图 3.krpano切图最常用的方式 4.瓦片地图金字塔模型 ==正片开始== 5.前置知识介 ...

  9. java/web/springboot项目使用WebSocket消息推送

    java/web/springboot项目使用WebSocket消息推送 最近项目中,有消息推送的广播和在线咨询的功能,以前也没搞过啊,有些小伙伴估计也是,那肯定要赶紧学习起来啊~ 不说废话,今天就告 ...

最新文章

  1. 【电信业务】【原则与规范】SOA 面向服务架构
  2. node mysql limit_node中mysql连接池的connectionLimit指什么,它和mysql的最小连接数和最大连接数的关系是什么?...
  3. 支持向量回归代码_RDKit:基于支持向量回归(SVR)预测logP
  4. 【NOI2020】命运【树形dp】【线段树合并】
  5. 2.Pycharm + Django + Python进行WEB路由配置
  6. DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=2 (转载)
  7. 23亿美元大市场,NFV做好了准备吗?
  8. 关于linux文件权限的说明
  9. C# Get请求携带body
  10. java鼠标左键拖拽事件_探索神秘的js拖拽事件
  11. 多应用集中落地,四川区块链产业爆发增长
  12. 【网络科普】NAS和SAN - 网络附加存储和存储区域网络
  13. [随想感悟] 申论到底是什么 写好申论的要点
  14. 杭电计算机学硕还是专硕就业好,19计算机考研选学硕还是专硕?
  15. LabVIEW编程LabVIEW开发在LabVIEW中复用现有代码
  16. 一键生成数据库表结构文档认准:screw工具(超级好用^_^)
  17. 人人都知“双十一”,几人仍记“光棍节”
  18. 苹果手机怎么把计算机放到桌面,苹果怎么投影到电脑_怎么把苹果手机投影到电脑屏幕上-win7之家...
  19. 微型计算机系统核心hhg,计算机应用基础测试题1
  20. 通过百度地图api实现简单经纬度输入定位(安卓端)

热门文章

  1. Android kernel vulnerability between November 2020 and April 2021
  2. c语言中用qt写换肤,让Qt应用程序支持换肤(Skin)功能
  3. What is Free Software?
  4. PHP做期货,单靠技术分析做期货,可行?
  5. java小农养成记第三十五天
  6. nearest_neighbor
  7. 使用UE4开发VR项目_性能优化(一)_常用工具
  8. 完全小白篇-用python爬取豆瓣电影影评
  9. 2020年终总结和展望
  10. Ubuntu虚拟机安装手札