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;
}
}
java逻辑编程题_用Java编程解决一道逻辑推理题相关推荐
- 使用程序解决一道逻辑推理题
今天看朋友发了一个老问题,一道很有意思的推理题:(转载请指明出于breaksoftware的csdn博客) 小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一 ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- 除了java还学什么_学好Java编程除了努力还需要具备什么?
Java编程语言的热流席卷了全球,它的出现摆脱了C语言尾大不掉的困境,灵活.多变,塑造性强的特点不仅符合当下互联网的发展趋势,也得到一批批青年俊才的青睐,Java编程抛出的橄榄枝,也吸引了大量计算机专 ...
- java计分系统编程代码_使用Java代码对实时系统进行编程
由于许多重要原因,Java语言在实时系统中的使用并不广泛. 这些包括Java语言设计固有的不确定性性能影响,例如动态类加载,以及Java Runtime Environment(JRE)本身,例如垃圾 ...
- java 是否含有日文_《JAVA编程思想》5分钟速成:第9章(接口)
第9章 接口 前言: 1.抽象类(abstract class)和接口(interface)有什么异同? 2.抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(n ...
- Java并发编程实战_福州java编程实战培训班排名
如何选择福州java培训中心? 在福州,如果想迅速掌握java开发,参加福州java培训班无疑是一种非常有效的方式.但是,市场上有这么多的java培训机构,我们在选择的时候难免会眼花缭乱.福州java ...
- java编写打印沙漏_打印沙漏编程总结
7-1 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * *** ***** 所谓" ...
- java程序设计模拟题_《Java程序设计》东师模拟题题目及答案
<Java程序设计>东师模拟题题目及答案 2020-08-30 09:08:37 931 有学员问关于<Java程序设计>东师模拟题题目及答案的题目的参考答案和解析,具体如下: ...
- python考试编程题九道_一道逻辑推理题的程序实现(纯属娱乐)
一份逻辑推理题的程序求解(纯属自娱自乐) 闲来无聊,看到QQ空间上转载了一份变态推理题的,至少表示我看了十多分钟无处下手,认识的人中有大神居然真的做出来了...我不知道他是们那么做的,不过作为编程爱好 ...
最新文章
- ACM题目————次小生成树
- Redis主从同步和持久化
- [Python学习] 专题六.局部变量、全局变量global、导入模块变量
- 软件工程第二次作业(原型设计)
- Java多线程的三种实现方式(重点看Collable接口实现方式)
- bzoj3771: Triple
- 创建phpinfo.php
- json mysql乱码问题_读写json中文ASCII乱码问题的解决方法
- 那些非常好用的电脑软件
- win10pe命令打开计算机,win10系统制作PE启动盘的操作方法
- java4android 教程_《Java4Android视频教程》学习笔记(三)
- [转]语言模型训练工具SRILM
- idea创建项目异常导致项目创建失败
- 中学计算机老师资质,2016下半年教师资格证考试中学信息技术备考指导
- DNS解析过程及工作原理
- Windows与USB的通信
- 查看电脑是否支持蓝牙和wifi
- 数据结构与算法笔记:抽象思维之转换视角,提炼共性(分书和八皇后问题算法重构)
- arcgis for js 4 隐藏缩放按钮及底部powered by ESRI
- AE 中的相关问题分析
热门文章
- mysql时间段以后_mysql时间段查询
- php active控件,php – 使用TbActiveForm选择列表中的动态选项
- vue中传值和传引用_vue prop属性传值与传引用示例
- markdown如何设置图片大小_不会吧,还不会用markdown排版吗
- android各组件翻译,Android App框架指南(译文)
- 爱奇艺怎么开启从列表删除时同时删除本地文件
- 腾讯视频怎么打开个人直播后台播放功能
- JAVA那点破事,并发、IO模型、集合、线程池、死锁、非阻塞、AQS...
- spring aop 中@annotation()和自定义注解的使用
- Spring循环依赖的三种方式