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编程解决一道逻辑推理题相关推荐

  1. 使用程序解决一道逻辑推理题

    今天看朋友发了一个老问题,一道很有意思的推理题:(转载请指明出于breaksoftware的csdn博客) 小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一 ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. 除了java还学什么_学好Java编程除了努力还需要具备什么?

    Java编程语言的热流席卷了全球,它的出现摆脱了C语言尾大不掉的困境,灵活.多变,塑造性强的特点不仅符合当下互联网的发展趋势,也得到一批批青年俊才的青睐,Java编程抛出的橄榄枝,也吸引了大量计算机专 ...

  4. java计分系统编程代码_使用Java代码对实时系统进行编程

    由于许多重要原因,Java语言在实时系统中的使用并不广泛. 这些包括Java语言设计固有的不确定性性能影响,例如动态类加载,以及Java Runtime Environment(JRE)本身,例如垃圾 ...

  5. java 是否含有日文_《JAVA编程思想》5分钟速成:第9章(接口)

    第9章 接口 前言: 1.抽象类(abstract class)和接口(interface)有什么异同? 2.抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(n ...

  6. Java并发编程实战_福州java编程实战培训班排名

    如何选择福州java培训中心? 在福州,如果想迅速掌握java开发,参加福州java培训班无疑是一种非常有效的方式.但是,市场上有这么多的java培训机构,我们在选择的时候难免会眼花缭乱.福州java ...

  7. java编写打印沙漏_打印沙漏编程总结

    7-1 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * *** ***** 所谓" ...

  8. java程序设计模拟题_《Java程序设计》东师模拟题题目及答案

    <Java程序设计>东师模拟题题目及答案 2020-08-30 09:08:37 931 有学员问关于<Java程序设计>东师模拟题题目及答案的题目的参考答案和解析,具体如下: ...

  9. python考试编程题九道_一道逻辑推理题的程序实现(纯属娱乐)

    一份逻辑推理题的程序求解(纯属自娱自乐) 闲来无聊,看到QQ空间上转载了一份变态推理题的,至少表示我看了十多分钟无处下手,认识的人中有大神居然真的做出来了...我不知道他是们那么做的,不过作为编程爱好 ...

最新文章

  1. ACM题目————次小生成树
  2. Redis主从同步和持久化
  3. [Python学习] 专题六.局部变量、全局变量global、导入模块变量
  4. 软件工程第二次作业(原型设计)
  5. Java多线程的三种实现方式(重点看Collable接口实现方式)
  6. bzoj3771: Triple
  7. 创建phpinfo.php
  8. json mysql乱码问题_读写json中文ASCII乱码问题的解决方法
  9. 那些非常好用的电脑软件
  10. win10pe命令打开计算机,win10系统制作PE启动盘的操作方法
  11. java4android 教程_《Java4Android视频教程》学习笔记(三)
  12. [转]语言模型训练工具SRILM
  13. idea创建项目异常导致项目创建失败
  14. 中学计算机老师资质,2016下半年教师资格证考试中学信息技术备考指导
  15. DNS解析过程及工作原理
  16. Windows与USB的通信
  17. 查看电脑是否支持蓝牙和wifi
  18. 数据结构与算法笔记:抽象思维之转换视角,提炼共性(分书和八皇后问题算法重构)
  19. arcgis for js 4 隐藏缩放按钮及底部powered by ESRI
  20. AE 中的相关问题分析

热门文章

  1. mysql时间段以后_mysql时间段查询
  2. php active控件,php – 使用TbActiveForm选择列表中的动态选项
  3. vue中传值和传引用_vue prop属性传值与传引用示例
  4. markdown如何设置图片大小_不会吧,还不会用markdown排版吗
  5. android各组件翻译,Android App框架指南(译文)
  6. 爱奇艺怎么开启从列表删除时同时删除本地文件
  7. 腾讯视频怎么打开个人直播后台播放功能
  8. JAVA那点破事,并发、IO模型、集合、线程池、死锁、非阻塞、AQS...
  9. spring aop 中@annotation()和自定义注解的使用
  10. Spring循环依赖的三种方式