蓝桥 凶手(Java)

本文通过六名嫌疑犯的口供,探讨一个复杂的逻辑谜题,利用逻辑推理找出唯一凶手,挑战读者的逻辑分析能力。

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

AILAB专项训练

问题描述

巴斯维克命案抓住了六个嫌疑犯,他们的口供如下:
  A:我不是罪犯
  B:A、C中有一个是罪犯
  C:A和B说了假话
  D:C和F说了假话
  E:其他五个人中,只有A和D说了真话
  F:我是罪犯
  他们中只有一半说了真话,凶手只有一个。
  本题可能有多种可能性,即正确答案(找到唯一的凶手)可能有多个,但每一个可能的答案(某一个是凶手)都满足上述口供。
  请编程找出可能的凶手输出。
  样例:(假设唯一的凶手是A或者D或者E,则输出结果为三行,按字母顺序依次输出)
  A
  D
  E


public class Main {

	/**
	 * 巴斯维克命案抓住了六个嫌疑犯,他们的口供如下:
  A:我不是罪犯
  B:A、C中有一个是罪犯
  C:A和B说了假话
  D:C和F说了假话
  E:其他五个人中,只有A和D说了真话
  F:我是罪犯
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int arr[]=new int[6];  //刚开始六个人,对应数值都是0
		for (int i = 0; i < arr.length; i++) {
			arr[i]=1;  //假设第i+1个人是凶手,1代表是凶手,0代表不是凶手
			int count = 0; //用来存入说真话的人数
			boolean f1=false,f2=false,f3=false,f4=false,f5=false,f6=false; //刚开始都是false
			//&&代表括号里面必须都为true才能执行语句,||代表里面有一个是true就执行下面语句
			if(arr[0]!=1) {f1=true;count++;} 
			if(arr[0]==1||arr[2]==1) {f2=true;count++;}
			if(!f1&&!f2) {f3=true;count++;}  
			if(arr[5]==1) {f6=true;count++;}
			if(!f3&&!f6) {f4=true;count++;}
			if(f1&&!f2&&!f3&&f4&&!f6) {f5=true;count++;}
			if (count==3) {  //判断是否有三个人说真话
				System.out.println((char)(i+65));
			}
			arr[i]=0;  //假设完了之后需要归零,进行下一次假设
		}
    }
}
### 蓝桥杯 1561 Java 解题思路及代码实现 对于蓝桥杯题目编号为1561的相关问题,虽然未提供具体描述,但从已知引用内容可以推测该问题可能涉及数值处理、字符串操作或其他基础算法设计[^1]。以下是基于常见蓝桥杯命题模式的一种假设解答。 #### 假设问题背景 如果题目要求对给定的大整数执行特定运算并返回结果,则可以通过以下方法解决: 1. **数值倍增与取模**:通过调整输入数据的大小关系完成指定计算逻辑。 2. **边界条件判断**:考虑特殊情况下程序的行为是否符合预期。 下面展示一段通用型求解函数及其调用方式作为示范[^1]: ```java import java.util.*; public class BlueBridgeProblem { public static long processNumber(long input) { // Step A: Double the value. input *= 2; // Step B: Divide by a constant factor and adjust based on remainder rules. input /= 10; if (input % 10 >= 5) { input += 10; } return Math.floorDiv(input, 10); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { String line = scanner.nextLine(); try{ long number = Long.parseLong(line.trim()); System.out.println(processNumber(number)); } catch(Exception e){ break; } } scanner.close(); } } ``` 上述代码片段实现了针对大范围正整数的操作流程定义,并提供了交互式的命令行接口用于测试不同样例的表现情况[^1]。 另外值得注意的是,在面对更大规模的数据集或者更加复杂的业务需求时,单纯依靠内置类型可能会遇到溢出风险等问题。此时应当引入更高精度的支持工具比如`BigInteger`库来进行替代开发工作[^2]。 #### 大数支持扩展方案 当面临诸如阶乘这样的指数级增长场景下,常规变量难以胜任存储任务。这时可采用如下策略构建高效可靠的解决方案: ```java import java.math.BigInteger; public class FactorialCalculation { private static final int MAX_LIMIT = 1_000; public static BigInteger calculateFactorial(int n) { BigInteger result = BigInteger.ONE; for(int i=1;i<=n;i++) { result = result.multiply(BigInteger.valueOf(i)); } return result; } public static void main(String []args){ for(int k=0;k<MAX_LIMIT && !Thread.currentThread().isInterrupted();k++){ System.out.printf("%d! = %s%n", k,calculateFactorial(k).toString()); } } } ``` 此版本利用了`BigInteger`类的强大功能解决了传统long/int所能表示的最大界限限制,从而能够轻松应对上千甚至更高的阶乘请求[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Abdulaziz02

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值