逻辑题

这是一道关于奥林匹克运动会运动员排名的逻辑题,涉及到5位运动员的排名谜团。题目中提到,前三名说谎,后两名说实话。通过分析运动员的陈述,可以推断出他们的实际排名。同时,文章还提供了使用Java解决此类问题的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

一架飞机载着5位运动员从奥林匹克运动会归来,这5位运动员在某个项目中排名第一到第五。他们说了下面这些话:
A:”我不是最后一名。”
B:”C是第三名。”
C:”A的排名在E后面。”
D:”E是第二名。”
E:”D不是第一名。”
处于谦虚或其他什么原因,金牌和银牌的得主都说了谎。那三个成绩相对较差的运动员倒说了真话。 他们的排名到底怎样?

 

解决:

 

Java程序的解决思路

//用了lambda表达式,需要jdk8+
import static java.lang.System.out;

public class Temp{
	interface Test{
		abstract boolean check(int ans[]);
	}
	static void checkFun(int i, boolean t[], int ans[], Test[] condition){
		int j;
		if(i==ans.length){ 
			for(j=0;j<condition.length;j++){
				if(condition[j].check(ans) == false){
					break;
				}  
			}
			if(j==condition.length){
				out.println("\n(Correct )ans:");
					for(int k=1;k<ans.length;k++)
						out.print(""+k+":"+ans[k]+"; ");
			}else{
				if(true) return;
				out.println("\n(Wrong )ans:");
				for(int k=1;k<ans.length;k++)
						out.print(""+k+":"+ans[k]+"; ");
			}
		}else{
			for(j=1;j<t.length;j++){
				if(t[j]==false){
					ans[i]=j;
					t[j]=true;
					checkFun(i+1, t, ans, condition);
					t[j]=false;
				} 
			}
				
			
		}
	}
	public static void main(String ...args){
		
		Test[] tCondition = new Test[5];
		 tCondition[0] = (ans)->{ //A不是最后一名
			boolean result=false;
			if(ans[1]!=5) result=true; 
			if(ans[1]==1 || ans[1]==2){
				if(result==false) return true;
				else return false;
			} 
			return result;
		};
		tCondition[1] = (ans)->{ //C是第三名
			boolean result=false;	
			if(ans[3]==3) result=true;
			if(ans[2]==1 || ans[2]==2){
				if(result==false) return true;
				else return false;
			} 
			return result;
		};
		tCondition[2] = (ans)->{ //A的排名在E后面
			boolean result=false;
			if(ans[1]>ans[5]) result=true;
			if(ans[3]==1 || ans[3]==2){
				if(result==false) return true;
				else return false;
			} 
			return result;
		};
		tCondition[3] = (ans)->{ //E是第二名
			boolean result=false;
			if(ans[5]==2) result=true;
			if(ans[4]==1 || ans[4]==2){
				if(result==false) return true;
				else return false;
			} 
			return result;
		};
		tCondition[4] = (ans)->{ //D不是第一名
			boolean result=false;
			if(ans[4]!=1) result=true;
			if(ans[5]==1 || ans[5]==2){
				if(result==false) return true;
				else return false;
			} 
			return result;
		};
		boolean exist[] = new boolean[6];
		int[] Tans = new int[6];
		for(int i=0;i<exist.length;i++) exist[i]=false;
		checkFun(1, exist, Tans, tCondition);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值