所以,我将主持午餐,我正在寻找一个有趣的活动。我记得曾经看过谷歌科技谈话视频,开头有一系列“这个代码会做什么”的c或c ++难题,我认为做类似的事情是个好主意。
你知道那个视频是哪个,因为我再也找不到了吗?你知道我可以从哪个网站获得这样的谜题吗?我更喜欢他们是否在C / C ++
谢谢:)
答案 0 :(得分:4)
也许不完全是你想要的,但仍然是:
您可以使用所有ASCII符号,但字母a ... z,A ... Z和数字0 ... 9除外; 此外,您可以使用符号2.构造一个值为100的最短C表达式。
例如:22*(2+2)+2*(2+2+2)
啰嗦; (222-22)/2
很短(10个符号),但不是最短的。
或者相同,但您应该使用0
代替2
;解决方案有点长,但它存在:)我很乐意解决这个问题。
答案 1 :(得分:3)
弄清楚会打印什么:
#include <stdio.h>
char *c[]=
{
"ENTER",
"NEW",
"POINT",
"FIRST"
};
char **cp[]={c+3,c+2,c+1,c};
char ***cpp=cp;
int main(void)
{
printf("%s",**++cpp);
printf("%s ",*--*++cpp+3);
printf("%s",*cpp[-2]+3);
printf("%s\n",cpp[-1][-1]+1);
return 0;
}
另请参阅this book。
答案 2 :(得分:2)
找出一组逻辑问题供人们推理。其中一些可能有封闭的解决方案,其他可能会开放讨论:
你被雇佣从农场买三匹马。当你到达时,你会看到有25匹马,并且他们有一条轨道,你可以让它们相互竞争,但是,唉,你忘了带上秒表,农场里没有。你需要进行多少次比赛才能选出最快的三匹马? (假设马不累;)
封闭的房间里有三个灯泡,房间外面有三个开关。每个开关都作用于其中一个灯泡,但它们没有标记。你能找到一种方法来确定每个灯泡只进入房间一次的开关吗?
在一个被遗忘的王国的死囚牢房中有100名智者。在国王生日的那一天,他决定为智者提供获得自由的机会,因此他决定接下来的游戏:所有的囚犯都会排队等候,国王将戴上一顶帽子,白色或者黑色,在每个囚犯的头顶。每种颜色的帽子数量未知。然后,国王会问每个囚犯从队列中的最后一个开始,他的帽子的颜色是什么,如果他猜测他会自由的。聪明人唯一可以说的是颜色:白色或黑色。智者们在夜间讨论这个问题,并制定一个总体上最佳的策略(即一项可以挽救大多数囚犯的策略)。什么是策略,有多少智者可以获得自由?
两名智者是在共同监狱的高塔中的囚犯,其中有10或13名其他囚犯。其中一个智者的窗户朝北,另一个朝南。监狱有两个地方,中午,一些普通的囚犯前往北方地区进行体育运动,而其余的囚犯(智者除外)则前往南部地区。智者不能互相交谈,但他们知道他们是明智的。病房每天都会要求他们猜测囚犯的总人数。如果智者中的任何一个猜测,两个人都会在日落前自由,但如果猜测错了,那么两个人都不会看到新的日出。第三天,一位智者猜到了这个数字,两人都回家了。监狱里有多少名囚犯?聪明人是怎么知道的?
我的老姨妈每天必须服用两种药物,A和B,每种药一粒,并且她必须非常小心,不要在同一天使用两种相同类型的药物,或者在一天中跳过一种药物,或者整个治疗都会失败。不幸的是,这两种药物几乎无法区分,所以医生告诉她在处理药物时非常谨慎。昨天,她没有注意到并从瓶子里取出三颗药丸。通过计算瓶子中的剩余药丸,她知道桌子上有2个A和1个B丸。在接下来的几天里,她是如何继续接受治疗的?
答案 3 :(得分:0)
我不知道任何网站,但这是我在一段时间内为constest写的 假设biguint是一个任意精度的无符号整数类
biguint poorly_named_function(unsigned long long input)
{
if (Solve==1) return biguint(1);
register biguint Even = 0;
register biguint Odd = 1;
register unsigned long long Loops = input/16+1;
switch (input%16/2) {
do {
case 0: Even+=Odd; Odd+=Even;
case 7: Even+=Odd; Odd+=Even;
case 6: Even+=Odd; Odd+=Even;
case 5: Even+=Odd; Odd+=Even;
case 4: Even+=Odd; Odd+=Even;
case 3: Even+=Odd; Odd+=Even;
case 2: Even+=Odd; Odd+=Even;
case 1: Even+=Odd; Odd+=Even;
}while(--Loops);
};
return (input&1 ? Odd+Even : Odd);
}
它找到斐波纳契数input
,其中输入1-10导致[1,1,2,3,5,8,13,21,34,55]
即使使用相对愚蠢的编译器,它也非常快。