【枚举】【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("\n");
}
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;
}

时间: 2024-08-28 10:02:16

【枚举】【lrj黑书】奇怪的问题(古老的智力题)的相关文章

黑书例题 Fight Club 区间DP

题目可以在bnuoj.soj等OJ上找到. 题意: 不超过40个人站成一圈,只能和两边的人对战.给出任意两人对战的输赢,对于每一个人,输出是否可能是最后的胜者. 分析: 首先序列扩展成2倍,破环成链. dp[i][j]表示i和j能够相遇对打,那么dp[i][i+n]为真代表可以成为最后胜者. 枚举中间的k,若i和j都能和k相遇,且i和j至少一人能打赢k,那么i和j可以相遇. 复杂度o(n^3) 1 #include<cstdio> 2 #include<cstring> 3 usi

黑书贪心例题之钓鱼 poj1042:Gone Fishing

总时间限制: 2000ms 内存限制: 65536kB 描述 John is going on a fishing trip. He has h hours available (1 <= h <= 16), and there are n lakes in the area (2 <= n <= 25) all reachable along a single, one-way road. John starts at lake 1, but he can finish at a

黑书之1.2.6:离散数学

题目描述: 有一个函数,它的定义域:1 to N(2<=N<=100000),值域f(n)为long int(in C++)(最后证明在-2^31—2^31).要求函数上的两个点a,b使得当x∈(a,b)函数f,在直线ab的下方,并且要求ab的倾角最大. 根据黑书所说,O(n^2)的算法确实是很容易相出,但是存在一种O(n)算法.想了许久都不能明白,中间确实想到过最终的解法,但是没有仔细想,故没有证明其正确性,最终没有相处此题. 根据网上的同道中人所述,写出算法: 从左到右扫描,O(n)的时间

枚举(黑白棋)

/*代码一:DFS+Enum*/ //Memory Time //240K 344MS //本题只要求输出翻转的次数,因此BFS或DFS都适用 #include<iostream> using namespace std; bool chess[6][6]={false};//利用的只有中心的4x4 bool flag; int step; int r[]={-1,1,0,0,0};//便于翻棋操作 int c[]={0,0,-1,1,0}; bool judge_all(void)//判断&

黑书练习题 更新中

1.4.7 奇数偶数 POJ 1733 Parity game 2.5.26 Unix 插头 POJ 1087 A Plug for UNIX 黑书练习题 更新中

POJ 1042 Gone Fishing (贪心)(刘汝佳黑书)

Gone Fishing Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 30281   Accepted: 9124 Description John is going on a fishing trip. He has h hours available (1 <= h <= 16), and there are n lakes in the area (2 <= n <= 25) all reachab

黑书笔记

就从P77开始记好了.(稍微扩容) P77 排序. 1.香农信息论 基于比较的排序不可能突破O(nlogn)的复杂度限制.1) 比较一次可以得到一个bool量,最大信息熵为$\log_2{2}=1.0$bit2) 全排列的个数是$n!$级别的,唯一地确定一个全排列需要$O\left(\log_2{n!}\right)=O(n\log{n})$bit的信息熵3) 因此比较的次数不可能少于$O(n\log{n})$级别. 2.实数比较的$O(n\log{\log{n}})$时间算法. 这个的资料我没

bzoj2539 丘比特的烦恼、黑书P333 (最优二分图匹配)

丘比特的烦恼 题目描述 Description 随着社会的不断发展,人与人之间的感情越来越功利化.最近,爱神丘比特发现,爱情也已不再是完全纯洁的了.这使得丘比特很是苦恼,他越来越难找到合适的男女,并向他们射去丘比特之箭.于是丘比特千里迢迢远赴中国,找到了掌管东方人爱情的神--月下老人,向他求教. 月下老人告诉丘比特,纯洁的爱情并不是不存在,而是他没有找到.在东方,人们讲究的是缘分.月下老人只要做一男一女两个泥人,在他们之间连上一条红线,那么它们所代表的人就会相爱--无论他们身处何地.而丘比特的爱

lrj紫书第五章

UVA-1592 1 // UVa1592 Database 2 // Rujia Liu 3 // 本程序只是为了演示STL各种用法,效率较低.实践中一般用C字符串和哈希表来实现. 4 5 #include<iostream> 6 #include<cstdio> 7 #include<vector> 8 #include<string> 9 #include<map> 10 #include<sstream> 11 using n