• 【枚举】【lrj黑书】奇怪的问题(古老的智力题)


    题目描述:

    请回答下面的 10 个问题,你的回答应保证每题惟有你的选择是正确的。

    ⑴ 第一个答案是b 的问题是哪一个?
    (a )2 ( b ) 3 ( c ) 4 ( d ) 5 ( e ) 6
    ⑵ 恰好有两个连续问题的答案是一样的,它们是:
    ( a ) 2 , 3 ( b ) 3, 4 ( c ) 4 ,5 ( d ) 5 ,6 ( e ) 6 ,7 
    ⑶ 本问题答案和哪一个问题的答案相同?
    ( a ) 1 ( b ) 2 ( c ) 4 ( d ) 7 ( e ) 6
    ⑷ 答案是a 的问题的个数是:
    ( a ) 0 ( b ) 1 ( c ) 2 ( d ) 3 ( e ) 4
    ⑸ 本问题答案和哪一个问题的答案相同?
    ( a ) 10 ( b ) 9 ( c ) 8 ( d ) 7 ( e ) 6
    ⑹ 答案是a 的问题的个数和答案是什么的问题的个数相同?
    ( a ) b ( b ) c ( c ) d ( d ) e ( e ) 以上都不是
    ⑺ 按照字母顺序,本问题的答案和下一个问题的答案相差几个字母?
    ( a ) 4 ( b ) 3 ( c ) 2 ( d ) 1 ( e ) 0(注: a和b相差一个字母)
    ⑻ 答案是元音字母的问题的个数是:
    ( a ) 2 ( b ) 3 ( c ) 4 ( d ) 5 ( e )6(注:A和E 是元音字母)
    ⑼ 答案是辅音字母的问题的个数是:
    ( a )一个质数 ( b )一个阶乘数 ( c )一个平方数 ( d )一个立方数 ( e )5的倍数
    ⑽ 本问题的答案是:
    ( a ) a ( b ) b ( c ) c ( d ) d ( e ) e

    实际答案:C D E B E E D C B A

    求解代码:

    #include <bits/stdc++.h>

    #define REP(i,n) for(int i=0;i<n;i++)
    #define REPAB(i,a,b) for(int i=a;i<=b;i++)
    #define REPN(i,a,n) for(int i=a;i<a+n;i++)

    #define MAXN 15

    int ans[MAXN];
    //problem.no from 1 to 10
    //ans.no from 1 to 5
    int a3[]={0,1,2,4,7,6};
    int a5[]={0,10,9,8,7,6};
    int a91[]={0,3,6,4,8,0};
    int a92[]={0,7,0,9,0,0};
    bool okay(){
    int k=0;
    //p1
    if(ans[ans[1]+1]!=2)return 0;
    REPN(i,1,6){
    if(ans[i]==2){
    if(i!=ans[1]+1)return 0;
    break;
    }
    if(i==6&&ans[i]!=2)return 0;
    }
    //p2
    if(ans[ans[2]+1]!=ans[ans[2]+2])return 0;
    REPN(i,1,5){
    if(i!=ans[2]){
    if(ans[i+1]==ans[i+2])return 0;
    }
    }
    //p3
    if(ans[a3[ans[3]]]!=ans[3])return 0;
    REPN(i,1,5){
    if(i!=ans[3])
    if(ans[3]==ans[a3[ans[3]]]);//return 0;
    }
    //p4
    REPAB(i,1,10){
    if(ans[i]==1)k++;
    }
    if(ans[4]-1!=k)return 0;
    k=0;
    //p5
    if(ans[a5[ans[5]]]!=ans[5])return 0;
    REPN(i,1,5){
    if(i!=ans[5])
    if(ans[5]==ans[a5[ans[5]]]);//return 0;
    }
    //p6
    k=0;
    REPN(i,1,10)if(ans[i]==1)k++;
    int kk=0;
    REPN(i,1,10){
    if(ans[i]==ans[6]+1)kk++;
    }
    if(ans[6]==5||kk==k);
    else return 0;
    REPN(i,1,5){
    kk=0;
    if(i==ans[6]||i==5)continue;
    REPN(j,1,10){
    if(ans[j]==i+1)kk++;
    }
    if(kk==k)return 0;
    }
    //p7
    if(5-ans[7]==ans[8]-ans[7]||5-ans[7]==ans[7]-ans[8]);
    else return 0;
    //p8
    k=0;
    REPN(i,1,10){
    if(ans[i]==1||ans[i]==5)k++;
    }
    if(ans[8]+1!=k)return 0;
    k=10-k;
    //p9
    if(k==a91[ans[9]]||k==a92[ans[9]]);
    else return 0;
    return 1;
    }
    void dfs(int n){
    if(n==11){
    if(okay()){
    REPN(i,1,10){
    printf("%d ",ans[i]);
    }
    printf(" ");
    }
    return;
    }
    REPN(i,1,5){
    ans[n]=i;
    dfs(n+1);
    }
    return;
    }
    #define LOCAL
    int main(){
    #ifdef LOCAL
    freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    #endif // LOCAL
    dfs(1);
    return 0;
    }

  • 相关阅读:
    C# 不用添加WebService引用,调用WebService方法
    贪心 & 动态规划
    trie树 讲解 (转载)
    poj 2151 Check the difficulty of problems (检查问题的难度)
    poj 2513 Colored Sticks 彩色棒
    poj1442 Black Box 栈和优先队列
    啦啦啦
    poj 1265 Area(pick定理)
    poj 2418 Hardwood Species (trie树)
    poj 1836 Alignment 排队
  • 原文地址:https://www.cnblogs.com/mothyrose/p/6790907.html
Copyright © 2020-2023  润新知