找犯人——蛮力法(算法)

某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:

(1)A、B至少有一人作案;(2)A、E、F三人中至少有两人参与作案;(3)A、D不可能是同案犯;(4)B、C或同时作案,或与本案无关;(5)C、D中有且仅有一人作案;(6)如果D没有参与作案,则E也不可能参与作案。试用蛮力法设计算法将作案人找出来。

 1 #include <iostream>
 2 #include<cstdio>
 3 using namespace std;
 4
 5 int main()
 6 {
 7     int A,B,C,D,E,F,G;
 8     for(A=0;A<2;A++)
 9     for(B=0;B<2;B++)
10     for(C=0;C<2;C++)
11     for(D=0;D<2;D++)
12     for(E=0;E<2;E++)
13     for(F=0;F<2;F++)
14     for(G=0;G<2;G++)
15     if((A+B>0) && (A+E+F>=2) && (A+D<2)            && ((B+C)==2 || (B+C)==0) && (C+D==1) && (D==0&&E==0||D==1)){
16         puts(A==1?"作案":"不作案");
17         puts(B==1?"作案":"不作案");
18         puts(C==1?"作案":"不作案");
19         puts(D==1?"作案":"不作案");
20         puts(E==1?"作案":"不作案");
21         puts(F==1?"作案":"不作案");
22         printf("\n");
23     }
24     return 0;
25 }

原文地址:https://www.cnblogs.com/xym4869/p/8643209.html

时间: 2024-10-01 20:58:11

找犯人——蛮力法(算法)的相关文章

算法——蛮力法之选择排序和冒泡排序c++实现

这次实现的是蛮力法中的两个例子,选择排序法和冒泡排序法,使用的编译环境是vs2013,下面对这两个算法做一个简单介绍,然后是两个算法的c++实现代码. 选择排序法比较的范围是整个列表,每次扫描结束找出最小的一个元素一次放在前面的位置:而冒泡排序法每次是将相邻两个元素进行比较,将较大的元素放在后面,这样一次扫描结束后就将当前最大的那个元素放在了列表的后面. 两个排序方法的算法如下: 选择排序法 SelectionSort(A[0....n-1]) //输入:一个可排序数组A[0....n-1],

算法——蛮力法之最近对问题和凸包问题

上次的博客写到一半宿舍停电了....然而今天想起来补充完的时候发现博客园并没有自动保存哦,微笑. 首先来看最近对问题,最近对问题描述的就是在包含n个端的集合中找到距离最近的两个点,当然问题也可以定义在多维空间中,但是这里只是跟随书上的思路实现了二维情况下的最近对问题.假设所有讨论的点是以标准的笛卡尔坐标形式(x,y)给出的,那么在两个点Pi=(Xi,Yi)和Pj=(Xj,Yj)之间的距离是标准的欧几里得距离: d(Pi,Pj)=sqrt( (X1-X2)2+(Y1-Y2)2 ) 蛮力法的思路就是

关于算法--蛮力法篇--选择排序

近日开始学习算法,所看课本为清华大学出版社的<算法设计与分析基础>,对简单的数据结构进行了复习,已经学习了算法效率分析基础. 本篇开始对所学算法的思想进行实际JS编码,看学习的进度,每日写一篇学到的算法,以上为背景. 蛮力法是一种直接解决问题的方法,常常基于问题的描述和所涉及的概念定义:所谓的“力”,指的是计算机的计算能力. 优点是①可解决广阔的领域各种问题:②可以产生一些合理的算法:③实例不多时,可用一种能接受的速度求解:④可解决一些小规模问题实例:⑤可作为研究或教学目的,作为其他算法的准绳

关于算法--蛮力法--字符与字符串匹配

一.顺序查找 1.步骤:简单的将给定列表中的连续元素与给定的查找键作比较,直到遇到一个匹配的元素或遇到匹配元素前就遍历了整个列表 2.JavaScript代码实现 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>SelectionFind</title> 6 </head>

(算法初步学习)蛮力法解决生成子集问题

关于蛮力法求生成子集问题 对于算法分析中的问题我已经不想对自己说什么了,到了大三了,竟然还是小白.对生成子集问题我研究了一下午,最后终于想通了.思路:   1.利用<math.h> 头文件中的pow(x,y)函数来求得2的n次方,作为外循环.2.然后写一个将10进制数转换为2进制数的函数(当然,C中有专门的转换进制的函数在<stdlib.h>中,但是,他转换下来  5不是0101而是101,这就导致需要分开判断,所以不用itoa函数).如下:conversation(int n,i

蛮力法-最近对和凸包问题

3.3.1 最近对问题 问题描述:要求找出一个包含n个点的集合中距离最近的两个点.原本思想是我们应该去比较两点之间的欧几里得距离,而实际上,我们可以去比较它们的平方,这样,我们就可以避免对平方根的近似求解. 代码实现: /** * 蛮力法解决最近对问题 * @author xiaofeig * @since 2015.9.16 * @param points 对象点集 * @return 返回包含最小对的下标 * */ public static int[] bruteForceClosestP

php 二分查找法算法详解

一.概念:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表.重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功. 二.代

蛮力法-顺序查找和字符串匹配

时间总让我有后知后觉的挫感,而我,总是习惯于四处张望. 3.2.1 顺序查找 将数组中的元素和给定的查找键进行比较,直到成功匹配,或者遍历完整个数组,查找失败.可将查找键添加到数组末尾,这样就不必每次循环时都检查是否到达了表的末尾(然并卵,数组不方便在添加元素吧). 代码实现: /** * 顺序查找 * @param array 对象数组 * @param key 查找键 * @return 查找成功返回元素下标,失败返回-1 * */ public static int sequentialS

python动态演示蛮力法解决凸包问题

最近开了算法课,但是我的算法着实不咋地,一直搞web和逆向,就没怎么编程.记录一下0.0 算法倒是不难实现,但是这个动态演示很烦,从纯粹的可视化小白,强行写完了,写完发现非常简单,只是自己不知道的函数太多了,哭了.... 蛮力法就不用解释了,通俗的说就是把所有可能试一遍. 凸包问题,就是将n个点中某几个点围成一个多边形,除了这n个点,其余的点都在这个多边形内. 核心算法其实就是一个行列式演变而来,后悔没学好线代..... 参考:https://blog.csdn.net/u011001084/a