1、狼追兔子 1 巧夺偶数 2 五猴分桃 3 高次方数 4 借书方案 5 过桥问题 6 数制转换 7 打渔晒网 8 喝酒问题 9 哥德巴赫猜想 10 打印日历 11 抓交通肇事逃逸犯 12 反序数 13 新郎新娘 14 称重砝码 15 求车速 16 谁是窃贼 17 出售金鱼 18 百钱百鸡 19 谜语博士 20 猜牌术(-) 21 舍罕王的失算 22 怎样存钱利最大 23 猜牌术(二) 24 爱因斯坦的数学题 25
2、 取火柴游戏 26 平分鱼和筐 27 可逆素数 28 三色球问题 29 抢n游戏 30 问题 A: 趣味程序设计_狼追兔子 时间限制: 1 Sec 内存限制: 128 MB 提交: 341 解决: 63 [提交][状态][讨论版] 题目描述 一只兔子躲进了n个环形分布的洞的某一个中。狼在第一个洞没有找到兔子,就隔一个洞,到第三个洞去找;也没有找到,就隔两个洞,到第六个洞去找。以后每次多一个洞去找兔子……这样下去,如果一直找不到兔子,请问兔子可能在哪个洞中? 输入 有多组测试数据,读取到文件结尾符为止。每组
3、测试数据输入n(2≤n≤100),即洞穴个数。输入到文件结尾符为止。 输出 兔子可能藏匿的洞。如果不止一个,按从小到大的顺序输出。如果不存在,输出空行。 样例输入 10 8 15 样例输出 2 4 7 9 2 4 5 7 8 9 11 12 14 提示 用一个数组a[10],对应的元素a[0],a[1],a[2]……a[9]对应表示10个洞,初值均置1。通过一个循环用“穷举法”找兔子,第n次查找对应第(n-1)%10个洞,如果在第(n-1)%10个洞中没有找到兔子,因此将数组元素a[(n-1)%10]置0值。循环完成后,检查a数组各元素(各个洞)的值,若其值仍为1,则
4、兔子可能藏身该洞中。
#include
5、 ok[n]=1; else ok[find]=1; for(s=0,i=1;i<=n;i++) s+=ok[i]; for(i=1,find=0;i<=n;i++) if(!ok[i]) { if(find!=(n-s-1)) { printf("%d ",i);find
6、 } else printf("%d",i); } printf("\n"); } return 0; } 问题 B: 趣味程序设计_巧夺偶数 时间限制: 1 Sec 内存限制: 128 MB 提交: 174 解决: 73 [提交][状态][讨论版] 题目描述 桌子上有25颗棋子。游戏双方轮流取子,每人每次最少取走一颗棋子,最多可取走3颗棋子。双方照这样取下去,直到取光所有
7、的棋子。于是双方手中必然一方为偶数,一方为奇数,偶数方为胜者。请编程实现人机游戏。人先走,计算机后走。若游戏结束,则输出“Game over!”。
输入
输入人取走棋子的个数。输入一次,按一次回车。游戏不止一轮。按下文件结尾符,退出游戏。必须在完成一轮后退出游戏。不得中途退出游戏。
输出
输出计算机取走的个数,每次输出最优解。
样例输入
1
1
1
1
1
1
1
2
1
3
2
1
3
1
样例输出
3
3
3
3
3
3
Game over!
2
3
1
2
3
1
Game over!
#include 8、io.h>
int main()
{
int n,sum=25;
loop:
while(scanf("%d",&n)!=EOF)
{
sum-=n;
if(sum==1)
{
printf("1\nGame over!\n");
sum=25;
goto loop;
if(sum==3||sum==2)
{
printf("1 9、\n");
sum--;
}
}
else
{
if(sum<=0)
{
printf("Game over!\n");
sum=25;
goto loop;
}
else
{ 10、
printf("%d\n",4-n);
if(n==1)
sum-=3;
if(n==2)
sum-=2;
if(n==3)
sum-=1;
}
}
}
return 0;
}
问题 C: 趣味程序设计_五猴分桃
时间限制 11、 1 Sec 内存限制: 128 MB
提交: 186 解决: 102
[提交][状态][讨论版]
题目描述
5只猴子一起摘了1堆桃子。因为太累了,它们商量决定,先睡一觉再分。过了不知多久,1只猴子来了。它见别的猴子没来,便将这1堆桃子平均分成5份,结果多了1个,就将多的这个吃了,拿走其中的1堆。又过了不知多久,第2只猴子来了。它不知道有1个同伴已经来过,还以为自己是第1个到的呢。于是将地上的桃子堆起来,平均分成5份,发现也多了1个,同样吃了这1个,拿走其中的1堆。第3只、第4只、第5只猴子都是这样……问这5只猴子至少摘了多少个桃子?第5个猴子走后还剩下多少个桃子?
输入
无 12、
输出
输出5只猴子至少摘了多少个桃子,第5个猴子走后还剩下多少个桃子。中间用空格隔开。
样例输入
样例输出
3121 1020
提示
思路一:“分”——假设至少摘了first_num个桃子,则令first_num=6,7,8,9,10,……这样不断的试,如果那个数能按规则(first_num=(first_num-1)/5*4)被5只猴子顺利的吃1个并分5组,则为所求。思路二:“凑”——假设最后剩下last_num个桃子,则令last_num=4,5,6,7,8,9,10,……这样不断的试,如果那个数能按规则(last_num%4==0则last_num = last_num 13、/ 4 * 5 + 1)凑5次,则为所求。
#include 14、if(t==5)
printf("%d %d\n",i,first);
}
else
break;
}
}
// printf("time:%.2lf\n",(double)clock() / CLOCKS_PER_SEC);
return 0;
}
问题 D: 趣味程序设计_高次方数
时间限制: 1 Sec 内存限制: 128 MB
提交: 559 解决: 80
[提交][ 15、状态][讨论版]
题目描述
求13的n次方(12 16、 {
if(n%2==1)
t=t*k%1000;
k=k*k%1000;
n>>=1;
}
return t;
}
int main()
{
long long n;
while(scanf("%lld",&n)!=EOF)
printf("%03d\n",fun(n));
return 0;
}
问题 E: 趣味程序设计_借书方案
时间限制: 1 Sec 内存限制: 128 MB
提交: 429 17、 解决: 154
[提交][状态][讨论版]
题目描述
小明有n本新书,要借给A、B、C三位小朋友。只借一次。若每人每次只能借一本,则可以有多少种不同的借法?
输入
有多组测试数据,输入整数n (5≤n≤1000),输入到文件结尾符为止。
输出
借法总数。
样例输入
5
6
7
8
样例输出
60
120
210
336
#include 18、n*(n-1)*(n-2));
return 0;
}
问题 F: 趣味程序设计_过桥问题
时间限制: 1 Sec 内存限制: 128 MB
提交: 102 解决: 19
[提交][状态][讨论版]
题目描述
过桥问题。有N(N≥2)个人在晚上需要从X地到达Y地,中间要过一座桥,过桥需要手电筒(而他们只有1个手电筒),每次最多两个人一起过桥(否则桥会垮)。N个人的过桥时间依次存入数组t[N]中,分别为:t[0], t[1], ……, t[N-1]。过桥的速度以慢的人为准!注意:手电筒不能丢过桥!问题是:编程求这N个人过桥所花的最短时间。
输入






