java逻辑编程题_用Java编程解决一道逻辑推理题

package mytest;

import java.util.Scanner;

public class Test14 {

/**

* 竞赛结果表明,他们都说对了一半,说错了一半,并且无并列名次,试编程输出a,b,c,d的各个名次。

* 分析:

* 我们将老师的预测列成二维数组形式。行数是老师的人数,也就是3.列数为5。

* 第一列表示该老师预测对的个数。由于一个老师预测了两部分,所以将初始值都设置为2.

* 我们首先假设第一个老师的第一部分预测时对的,那么就需要将预测了同一人,预测了同一名次,

* 以及第一个老师的另一部分预测全部设置为null,并且将相应的预测数减1.直到某一个预测数为0时,

* 那么这个假设就是错误的。

* @param args

*/

public static void main(String[] args) {

String[][] str = new String[3][5];

for(int x = 0;x<3;x++){

str[x][0] = 2+"";

}

System.out.println("注意:输入时人与名次用等号连接,人与人之间用逗号隔开。");

for(int x = 1;x<=3;x++){

System.out.print("请输入第"+x+"个老师的预测:");

Scanner sc = new Scanner(System.in);

String a = sc.next();

int firstd = a.indexOf("=");

int lastd = a.lastIndexOf("=");

int dou = a.indexOf(",");

str[x-1][Integer.parseInt(a.substring(firstd+1,dou))] = a.substring(0, firstd);

str[x-1][Integer.parseInt(a.substring(lastd+1))] = a.substring(dou+1, lastd);

}

String[][] bei = new String[3][5];//将数组备份,方便还原。

bei= fu(str,bei);

//由于第一个老师肯定会预测对一个,所以不需要进行行的遍历。

for(int y = 1;y<5;y++){

if(str[0][y] == null)

continue;

//假设第一个老师的当前预测是正确的,那么需要进行判断。

boolean b = hanshu(0,y,str);

//如果b是真的,那么就需要将所有的地方都进行一次判断。

//因为还有可能存在别的相矛盾的预测。

if(b){

k:for(int m = 1;m<3;m++){//第一个老师的正确预测已经假设过了,所以不需要从0开始。

for(int n = 1;n<5;n++)

if(str[m][n]!=null){

b = b&&hanshu(m,n,str);

if(!b)//如果某个预测出现了错误,那么就直接跳出循环即可。

break k;//跳出最外层,因为这个假设不对。

}

}

}

if(b){//如果当前假设成立,那么遍历输出相应的结果。

for(int x1 = 0;x1<3;x1++){

for(int y1 = 1;y1<5;y1++){

if(str[x1][y1]!=null)

System.out.println(str[x1][y1]+"是第"+y1+"名");

}

}

}

else{

if(y == 4){//当第一个老师的所有预测都是错误的时候,题目就无法完成了。

System.out.println("无法推断出名次。");

break;

}

str = fu(bei,str);//通过上面的操作,已经将str进行了改变,所以需要还原。

}

}

}

//改变同行、同列以及相同的人后,判断是不是出现错误。

private static boolean hanshu(int col, int row, String[][] str) {

boolean b= false;

for(int x = 0;x<3;x++){

for(int y = 1;y<5;y++){

b= false;//每一个位置开始时假设没有发生变化。

if(str[x][y]!=null){

if(x == col&&y!=row){//同行不同列

str[x][y] = null;

b = true;

}

else if( y == row&&x!=col){//同列不同行

str[x][y] = null;

b = true;

}

else if(str[x][y].equals(str[col][row])&&x!=col&&y!=row){//即不同列也不同行,但是预测的人是一样的。

str[x][y] = null;

b = true;

}

if(b){//如果该位置发生了变化,那么就将它所在的行的预测数减1.

str[x][0] = Integer.parseInt(str[x][0])-1+"";

if(str[x][0].equals("0"))

return false;

}

}

}

}

return true;

}

//将String[][]还原。

private static String[][] fu(String[][] o,String[][] b){

for(int x = 0;x

for(int y = 0;y

b[x][y] = o[x][y];

return b;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3线程池爬虫_python3爬虫中多线程的优势总结

有些小伙伴跟小编讨论了python中使用多线程原理的问题&#xff0c;就聊到了关于python多线程的弊端问题&#xff0c;这点可能在使用的过程中大家会能感觉到。而且之前讲过的GIL也是对python多线程的一种限制。那么&#xff0c;我们为什么还要用多线程呢&#xff1f;当然是多线程…

java表格的创建_Java创建表格实例详解 原创

表格是最常用的数据统计形式之一&#xff0c;在 swing 中 由 JTable 类实现表格。接下来&#xff0c;我们看看怎么利用 JTable 创建表格。在 JTable 类中除了默认的构造方法外&#xff0c;还提供了利用指定表格列名数组和表格数据数组创建表格的构造方法&#xff0c;代码如下&a…

java insert方法_【Oracle/Java】以Insert ALL方式向表中插入百万条记录,耗时9分17秒...

packagecom.hy;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.text.MessageFormat;/*** 百万数据插入Oracle表中*authorhorn1**/public classMillionInserter {//连接到…

nodejs mac java home_Mac上搭建nodejs开发环境

###Mac上搭建nodejs开发环境####安装homebrew123ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"brew updatebrew doctor####安装nodejs通过brew安装nodejs和grunt12brew install nodenpm install -g grunt-cli安装成功…

java spring mvc_java spring mvc 全注解

本人苦逼学生一枚,马上就要毕业,面临找工作,实在是不想离开学校.在老师的教导下学习了spring mvc ,配置文件实在繁琐,因此网上百度学习了spring mvc 全注解方式完成spring的装配工作;废话不多说了上干货,其实我也没怎么理解不过简单的运行了一个spring mvc 全注解项目,也不能说…

java note项目_Java Request.setNote方法代码示例

import org.apache.catalina.connector.Request; //导入方法依赖的package包/类/*** Perform single-sign-on support processing for this request.** param request The servlet request we are processing* param response The servlet response we are creating** exceptio…

java 检索编号输出信息_java,_java 如何解析txt文档,输入检索信息,然后输出,java - phpStudy...

java 如何解析txt文档&#xff0c;输入检索信息&#xff0c;然后输出请输入代码需求&#xff1a;请解析config.txt&#xff0c;文件格式包括段落名称、字段名称和字段值。段落名称的值为&#xff1a;"segment:"右边的字符串&#xff0c;在一个文件中不会有重复的段落…

java语言有没有平台无关性_Java语言具有良好的安全性和可移植性及平台无关性。...

【判断题】在类的定义中如果不明确给出父类,那么默认父类是Object类。【判断题】数组一旦创建大小不可改变。【单选题】手绘天花布置图的表示方法中,凡是剖到的墙、柱的断面轮廓线用( )绘制。【单选题】天花表面有进退关系的处理形式,常常采用暗灯槽,以及与各种类型的吊灯、吸顶…

java 配置hdfs集群_Hadoop集群搭建-04安装配置HDFS

HDFS是配合Hadoop使用的分布式文件系统&#xff0c;分为namenode: nn1.hadoop nn2.hadoopdatanode: s1.hadoop s2.hadoop s3.hadoop(看不明白这5台虚拟机的请看前面 01前期准备 )解压配置文件[hadoopnn1 hadoop_base_op]$ ./ssh_all.sh mv /usr/local/hadoop/etc/hadoop /usr/l…

使用双异步后,从 191s 优化到 2s

目录 一、一般我会这样做&#xff1a;操作起来&#xff0c;如果文件比较多&#xff0c;数据量都很大的时候&#xff0c;会非常慢。 二、谁写的&#xff1f;拖出去&#xff0c;斩了&#xff01;优化1&#xff1a;先查询全部数据&#xff0c;缓存到map中&#xff0c;插入前再进行…

java xxe漏洞利用_【技术分享】XXE漏洞攻防之我见

作者&#xff1a;激越王预估稿费&#xff1a;400RMB投稿方式&#xff1a;发送邮件至linwei#360.cn&#xff0c;或登陆网页版在线投稿你是否听说过xml注入攻击呢&#xff0c;或者对它只知其一不知其二呢&#xff1f;现在让我们从xml相关基础知识开始&#xff0c;一步步了解xml攻…

java ios压缩图片,Java、ios图片上传

IOS客服端代码interface ViewController (){NSString *boundary;NSString *fileParam;NSString *baseUrl;NSString *fileName;}endimplementation ViewController- (void)viewDidLoad{[super viewDidLoad];boundary "----------V2ymHFg03ehbqgZCaKO6jy";fileParam …

线谱法 时钟分量的提取 matlab,LMD局域均值分解的matlab程序及示例

说明&#xff1a;研究LMD局域均值分解有3个月左右&#xff0c;能找到的相关文章也基本上看了一遍&#xff0c;觉得是个很好的方法&#xff0c;号称是EMD经验模态分解的改进版。但是网络上一直没有找到该算法的matlab程序&#xff0c;只见文章说的天花乱坠。后来自己写了一个&am…

matlab 多项式表达,MATLAB自学笔记(十七):多项式及其函数

终于结束了关于MATLAB的基础知识学习部分&#xff0c;开始了对数据的分析1.多项式的表达与创建MATLAB中用一维行向量来表示多项式&#xff0c;将多项式的系数按照降幂次序存放在向量中。请注意上面一句话&#xff0c;这将是MATLAB中对多项式操作的关键MATLAB中对多项式中缺少的…

matlab绘制8条曲线,科学网—【Matlab】如何用plotyy对应坐标绘制多条曲线 - 叶瑞杰的博文...

例子&#xff1a;设x1:0.01:100;y10.2*sin(x);y20.3*sin(x);y30.4*sin(x);y40.5*sin(x);y50.6*sin(x);以左边坐标轴为参考画一条曲线&#xff0c;以右边坐标轴画四条曲线&#xff1a;figure;[AX,h1,h2]plotyy(x,y1,x,[y2;y3;y4;y5]); %用分号还是逗号视y矩阵而定&#xff0c…

matlab数字通信,基于matlab时分复用数字通信系统的设计与实现.pdf

一、系统的功能及原理描述时分多路复用(TDM&#xff0c;time division multiplex )&#xff1a;在实际的通信系统中&#xff0c;为了提高通信系统的利用率&#xff0c;往往用多路通信的方式来传输信号。所谓多路通信&#xff0c;就是指把多个不同信源所发出的信号组合成一个群信…

matlab建立的发动机的模型,奇瑞使用基于模型的设计实现发动机管理系统软件的自主开发...

奇瑞采用了基于模型的设计&#xff0c;并请 MathWorks 工程师来协助其工程团队掌握 MATLAB 和 Simulink 的运用。奇瑞团队使用 Microsoft Word 定义系统需求。他们基于这些需求使用 Simulink 和 Stateflow 开发了一个 EMS 控制模型。使用 Simulink Check™ 和 Simulink Require…

matlab melbankm,Matlab v_melbankm函数参数详解(英文附例)

Matlab v_melbankm函数参数详解(英文附例)笔者使用的是R2019的matlab&#xff0c;下载了voicebox安装至matlab路径下即可使用。下载voicebox请参看此博客需要注意的是&#xff0c;melbankm改成了v_melbankm&#xff0c;今天自己使用此函数时后面几个参数不知道含义&#xff0c;…

php csrf攻击 xss区别,XSS与CSRF攻击及防御方法

前言web安全这词可能对于服务端工程师来说更加“眼熟”&#xff0c;部分前端工程师并不是十分了解&#xff0c;今天就来讲讲XSS攻击与CSRF攻击及防御方法XSSXSS (Cross Site Scripting)&#xff0c;即跨站脚本攻击&#xff0c;是一种常见于 Web 应用中的计算机安全漏洞。大部分…

java 文件名空格,java关于文件名带有空格的个人见解

好久没写文章了&#xff0c;为什么会有这个标题呢最近上篇文章不是写pdf生成吗&#xff0c;其中要加一个印章的图标&#xff0c;这个图标要跟pdf连体&#xff0c;就是不能单独被保存&#xff0c;基本上有几种保存图标的方法&#xff1a;1.数据库2.本地文件我选择了本地的文件&a…