2018 刑侦科推理试题

 

思路;

讲每个题的写成一个判断函数

我们可以进行10重for枚举每个题的答案

或者dfs枚举给一个题的值:

有两种写法:第一种是10重for暴力(看起来太蠢了)

第二种 :dfs(实质还是10重for暴力,只不过运用了递归将代码量变少)

第一种代码如下

#include <bits/stdc++.h>

#define maxn 500005

typedef long long ll;

using namespace std;

ll a[maxn],b[maxn];
int title2()//第二题
{
    if(abs(a[5] - a[2]) == 2)return 1;
    else return 0;
}

int title3()//第三题
{
    ll k = 0;
    if(a[3] == 1 && a[2] != a[3] && a[4] != a[3] && a[6] != a[3])k++;
    if(a[3] == 2 && a[2] != a[6] && a[3] != a[6] && a[4] != a[6])k++;
    if(a[3] == 3 && a[3] != a[2] && a[4] != a[2] && a[6] != a[2])k++;
    if(a[3] == 4 && a[2] != a[4] && a[3] != a[4] && a[6] != a[4])k++;
    if(k == 1)return 1;
    else return 0;
}

int title4()//第四题
{
    ll k = 0;
    if(a[4] == 1 && a[1] == a[5] && a[2] != a[7] && a[1] != a[9] && a[6] != a[10])k++;
    if(a[4] == 2 && a[1] != a[5] && a[2] == a[7] && a[1] != a[9] && a[6] != a[10])k++;
    if(a[4] == 3 && a[1] != a[5] && a[2] != a[7] && a[1] == a[9] && a[6] != a[10])k++;
    if(a[4] == 4 && a[1] != a[5] && a[2] != a[7] && a[1] != a[9] && a[6] == a[10])k++;
    if(k == 1)return 1;
    else return 0;
}

int title5()//第五题
{
    ll k = 0;
    if(a[5] == 1 && a[8] == 1)k = 1;
    if(a[5] == 2 && a[4] == 2)k = 1;
    if(a[5] == 3 && a[9] == 3)k = 1;
    if(a[5] == 4 && a[7] == 4)k = 1;
    if(k == 1)return 1;
    else return 0;
}

int title6()//第六题
{
    ll k = 0;
    if(a[6] == 1 && a[2] == a[8] && a[4] == a[8] && (a[1] != a[8] || a[6] != a[8]) && (a[3] != a[8] || a[10] != a[8]) && (a[5] != a[8] || a[9] != a[8]))k++;
    if(a[6] == 2 && a[1] == a[8] && a[6] == a[8] && (a[2] != a[8] || a[4] != a[8]) && (a[3] != a[8] || a[10] != a[8]) && (a[5] != a[8] || a[9] != a[8]))k++;
    if(a[6] == 3 && a[3] == a[8] && a[10] == a[8] && (a[1] != a[8] || a[6] != a[8]) && (a[2] != a[8] || a[4] != a[8]) && (a[5] != a[8] || a[9] != a[8]))k++;
    if(a[6] == 4 && a[5] == a[8] && a[9] == a[8] && (a[1] != a[8] || a[6] != a[8]) && (a[3] != a[8] || a[10] != a[8]) && (a[2] != a[8] || a[4] != a[8]))k++;
    if(k == 1)return 1;
    else return 0;
}

int title7()//第七题
{
    ll is1 = 0,is2 = 0,is3 = 0,is4 = 0,k = 0;
    for(int i = 1; i <= 10; i ++)
    {
        if(a[i] == 1) is1++;
        if(a[i] == 2) is2++;
        if(a[i] == 3) is3++;
        if(a[i] == 4) is4++;
    }

    if(a[7] == 1 && is3 < is1 && is3 < is2 && is3 < is4)k++;
    if(a[7] == 2 && is2 < is1 && is2 < is3 && is2 < is4)k++;
    if(a[7] == 3 && is1 < is2 && is1 < is3 && is1 < is4)k++;
    if(a[7] == 4 && is4 < is1 && is4 < is2 && is4 < is3)k++;

    if(k == 1)return 1;
    else return 0;
}

int title8()//第八题
{
    ll k = 0;
    if(a[8] == 1 && abs(a[7] - a[1]) != 1 && abs(a[5] - a[1]) == 1 && abs(a[2] - a[1]) == 1 && abs(a[10] - a[1]) == 1)k++;
    if(a[8] == 2 && abs(a[5] - a[1]) != 1 && abs(a[7] - a[1]) == 1 && abs(a[2] - a[1]) == 1 && abs(a[10] - a[1]) == 1)k++;
    if(a[8] == 3 && abs(a[2] - a[1]) != 1 && abs(a[5] - a[1]) == 1 && abs(a[7] - a[1]) == 1 && abs(a[10] - a[1]) == 1)k++;
    if(a[8] == 4 && abs(a[10] - a[1]) != 1 && abs(a[5] - a[1]) == 1 && abs(a[2] - a[1]) == 1 && abs(a[7] - a[1]) == 1)k++;
    if(k == 1)return 1;
    else return 0;
}

int title9()//第九题
{
    ll k = 0;
    if(a[9] == 1 && ((a[1] == a[6] && a[6] != a[5]) || (a[1] != a[6] && a[6] == a[5]))) k++;
	if(a[9] == 2 && ((a[1] == a[6] && a[10] != a[5]) ||(a[1] != a[6] && a[10] == a[5]))) k++;
	if(a[9] == 3 && ((a[1] == a[6] && a[2] != a[5]) || (a[1] != a[6] && a[2] == a[5]))) k++;
	if(a[9] == 4 && ((a[1] == a[6] && a[9] != a[5]) || (a[1] != a[6] && a[9] == a[5]))) k++;
    if(k == 1)return 1;
    else return 0;
}

int title10()//第十题
{
    ll is1 = 0,is2 = 0,is3 = 0,is4 = 0,k = 0;
    for(int i = 1; i <= 10; i ++)
    {
        if(a[i] == 1) is1++;
        if(a[i] == 2) is2++;
        if(a[i] == 3) is3++;
        if(a[i] == 4) is4++;
    }
    memset(b,0,sizeof(b));
    b[1] = is1;
    b[2] = is2;
    b[3] = is3;
    b[4] = is4;
    sort(b+1,b+5);
    if(a[10] == 1 && b[4] - b[1] == 3)k = 1;
    if(a[10] == 2 && b[4] - b[1] == 2)k = 1;
    if(a[10] == 3 && b[4] - b[1] == 4)k = 1;
    if(a[10] == 4 && b[4] - b[1] == 1)k = 1;
    if(k == 1)return 1;
    else return 0;
}
int main()
{
    for(int q = 1; q <= 4; q ++)
    {
        for(int w =1; w <= 4; w ++)
        {
            for(int e = 1; e <= 4; e ++)
            {
                for(int r = 1; r <= 4; r ++)
                {
                    for(int t = 1; t <= 4; t ++)
                    {
                        for(int y = 1; y <= 4; y ++)
                        {
                            for(int u = 1; u <= 4; u ++)
                            {
                                for(int i = 1; i <= 4; i ++)
                                {
                                    for(int o = 1; o <= 4; o ++)
                                    {
                                        for(int p = 1; p <= 4; p ++)
                                        {
                                            a[1] = q;
                                            a[2] = w;
                                            a[3] = e;
                                            a[4] = r;
                                            a[5] = t;
                                            a[6] = y;
                                            a[7] = u;
                                            a[8] = i;
                                            a[9] = o;
                                            a[10] = p;
                                            if(title2() && title3() && title4() && title5() && title6() &&title7() && title8() && title9() && title10())
                                            {
                                                cout << "Orz答案"  << endl;
                                                char c;
                                                for(int i = 1; i <= 10; i ++)
                                                {
                                                    c = a[i] - 1 + 'A';
                                                    cout << c << ' ';
                                                }
                                                cout << endl;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

第二种代码如下

#include <bits/stdc++.h>
 
#define maxn 500005
 
typedef long long ll;
 
using namespace std;
 
ll a[maxn],b[maxn];
int title2()//第二题
{
    if(abs(a[5] - a[2]) == 2)return 1;
    else return 0;
}
 
int title3()//第三题
{
    ll k = 0;
    if(a[3] == 1 && a[2] != a[3] && a[4] != a[3] && a[6] != a[3])k++;
    if(a[3] == 2 && a[2] != a[6] && a[3] != a[6] && a[4] != a[6])k++;
    if(a[3] == 3 && a[3] != a[2] && a[4] != a[2] && a[6] != a[2])k++;
    if(a[3] == 4 && a[2] != a[4] && a[3] != a[4] && a[6] != a[4])k++;
    if(k == 1)return 1;
    else return 0;
}
 
int title4()//第四题
{
    ll k = 0;
    if(a[4] == 1 && a[1] == a[5] && a[2] != a[7] && a[1] != a[9] && a[6] != a[10])k++;
    if(a[4] == 2 && a[1] != a[5] && a[2] == a[7] && a[1] != a[9] && a[6] != a[10])k++;
    if(a[4] == 3 && a[1] != a[5] && a[2] != a[7] && a[1] == a[9] && a[6] != a[10])k++;
    if(a[4] == 4 && a[1] != a[5] && a[2] != a[7] && a[1] != a[9] && a[6] == a[10])k++;
    if(k == 1)return 1;
    else return 0;
}
 
int title5()//第五题
{
    ll k = 0;
    if(a[5] == 1 && a[8] == 1)k = 1;
    if(a[5] == 2 && a[4] == 2)k = 1;
    if(a[5] == 3 && a[9] == 3)k = 1;
    if(a[5] == 4 && a[7] == 4)k = 1;
    if(k == 1)return 1;
    else return 0;
}
 
int title6()//第六题
{
    ll k = 0;
    if(a[6] == 1 && a[2] == a[8] && a[4] == a[8] && (a[1] != a[8] || a[6] != a[8]) && (a[3] != a[8] || a[10] != a[8]) && (a[5] != a[8] || a[9] != a[8]))k++;
    if(a[6] == 2 && a[1] == a[8] && a[6] == a[8] && (a[2] != a[8] || a[4] != a[8]) && (a[3] != a[8] || a[10] != a[8]) && (a[5] != a[8] || a[9] != a[8]))k++;
    if(a[6] == 3 && a[3] == a[8] && a[10] == a[8] && (a[1] != a[8] || a[6] != a[8]) && (a[2] != a[8] || a[4] != a[8]) && (a[5] != a[8] || a[9] != a[8]))k++;
    if(a[6] == 4 && a[5] == a[8] && a[9] == a[8] && (a[1] != a[8] || a[6] != a[8]) && (a[3] != a[8] || a[10] != a[8]) && (a[2] != a[8] || a[4] != a[8]))k++;
    if(k == 1)return 1;
    else return 0;
}
 
int title7()//第七题
{
    ll is1 = 0,is2 = 0,is3 = 0,is4 = 0,k = 0;
    for(int i = 1; i <= 10; i ++)
    {
        if(a[i] == 1) is1++;
        if(a[i] == 2) is2++;
        if(a[i] == 3) is3++;
        if(a[i] == 4) is4++;
    }
 
    if(a[7] == 1 && is3 < is1 && is3 < is2 && is3 < is4)k++;
    if(a[7] == 2 && is2 < is1 && is2 < is3 && is2 < is4)k++;
    if(a[7] == 3 && is1 < is2 && is1 < is3 && is1 < is4)k++;
    if(a[7] == 4 && is4 < is1 && is4 < is2 && is4 < is3)k++;
 
    if(k == 1)return 1;
    else return 0;
}
 
int title8()//第八题
{
    ll k = 0;
    if(a[8] == 1 && abs(a[7] - a[1]) != 1 && abs(a[5] - a[1]) == 1 && abs(a[2] - a[1]) == 1 && abs(a[10] - a[1]) == 1)k++;
    if(a[8] == 2 && abs(a[5] - a[1]) != 1 && abs(a[7] - a[1]) == 1 && abs(a[2] - a[1]) == 1 && abs(a[10] - a[1]) == 1)k++;
    if(a[8] == 3 && abs(a[2] - a[1]) != 1 && abs(a[5] - a[1]) == 1 && abs(a[7] - a[1]) == 1 && abs(a[10] - a[1]) == 1)k++;
    if(a[8] == 4 && abs(a[10] - a[1]) != 1 && abs(a[5] - a[1]) == 1 && abs(a[2] - a[1]) == 1 && abs(a[7] - a[1]) == 1)k++;
    if(k == 1)return 1;
    else return 0;
}
 
int title9()//第九题
{
    ll k = 0;
    if(a[9] == 1 && ((a[1] == a[6] && a[6] != a[5]) || (a[1] != a[6] && a[6] == a[5]))) k++;
	if(a[9] == 2 && ((a[1] == a[6] && a[10] != a[5]) ||(a[1] != a[6] && a[10] == a[5]))) k++;
	if(a[9] == 3 && ((a[1] == a[6] && a[2] != a[5]) || (a[1] != a[6] && a[2] == a[5]))) k++;
	if(a[9] == 4 && ((a[1] == a[6] && a[9] != a[5]) || (a[1] != a[6] && a[9] == a[5]))) k++;
    if(k == 1)return 1;
    else return 0;
}
 
int title10()//第十题
{
    ll is1 = 0,is2 = 0,is3 = 0,is4 = 0,k = 0;
    for(int i = 1; i <= 10; i ++)
    {
        if(a[i] == 1) is1++;
        if(a[i] == 2) is2++;
        if(a[i] == 3) is3++;
        if(a[i] == 4) is4++;
    }
    memset(b,0,sizeof(b));
    b[1] = is1;
    b[2] = is2;
    b[3] = is3;
    b[4] = is4;
    sort(b+1,b+5);
    if(a[10] == 1 && b[4] - b[1] == 3)k = 1;
    if(a[10] == 2 && b[4] - b[1] == 2)k = 1;
    if(a[10] == 3 && b[4] - b[1] == 4)k = 1;
    if(a[10] == 4 && b[4] - b[1] == 1)k = 1;
    if(k == 1)return 1;
    else return 0;
}

ll flag = 0;
void dfs(ll j){
	//判断枚举的答案是不是正确的 
	if(title2() && title3() && title4() && title5() && title6() &&title7() && title8() && title9() && title10())
    {
        cout << "Orz答案"  << endl;
        char c;
        for(int i = 1; i <= 10; i ++)
        {
            c = a[i] - 1 + 'A';
            cout << c << ' ';
        }
        cout << endl;
        flag = 1;
    }
    //当枚举的题数超过10或者已经有了正确答案不在进行dfs 
	if(j > 10 || flag == 1)return ;

	//枚举每个题的答案 
	for(int i = 1; i <= 4; i ++){
		a[j] = i;
		dfs(j + 1);	
	}
}
int main()
{
    dfs(1);
    
    return 0;
}

答案如下

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值