C语言趣味程序设计题目百例Word下载.docx
《C语言趣味程序设计题目百例Word下载.docx》由会员分享,可在线阅读,更多相关《C语言趣味程序设计题目百例Word下载.docx(45页珍藏版)》请在冰豆网上搜索。
![C语言趣味程序设计题目百例Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/7/088dc792-7364-41af-9d79-f36c9c691455/088dc792-7364-41af-9d79-f36c9c6914551.gif)
1224ProblemN
趣味程序设计_新郎新娘
1225ProblemO
趣味程序设计_称重砝码
1226ProblemP
趣味程序设计_求车速
1227ProblemQ
趣味程序设计_谁是窃贼
1228ProblemR
趣味程序设计_出售金鱼
1229ProblemS
趣味程序设计_百钱百鸡
1230ProblemT
趣味程序设计_谜语博士
1231ProblemU
趣味程序设计_猜牌术(-)
1232ProblemV
趣味程序设计_舍罕王的失算
1233ProblemW
趣味程序设计_怎样存钱利最大
1234ProblemX
趣味程序设计_猜牌术
(二)
1235ProblemY
趣味程序设计_爱因斯坦的数学题
1236ProblemZ
趣味程序设计_取火柴游戏
1237Problema
趣味程序设计_平分鱼和筐
1238Problemb
趣味程序设计_可逆素数
1239Problemc
趣味程序设计_三色球问题
1240Problemd
趣味程序设计_抢n游戏
写在最前:
本文档中的题目;
在不不同的编译器中可能会有提示错误,呵呵,小小的动动手改下变量的定义就可以运行了………………..
由于能力不足..有题目未解决的…或者有错误的我会…认真听取大家的..意见的….
呵呵……..有一两个….偷了下懒哦………
提供原题目还有本人自己的解答的源代码。
感谢大家的。
。
建议…………….
问题A:
趣味程序设计_狼追兔子
时间限制:
1Sec
内存限制:
128MB
提交:
341
解决:
63
[提交][状态][讨论版]
题目描述
一只兔子躲进了n个环形分布的洞的某一个中。
狼在第一个洞没有找到兔子,就隔一个洞,到第三个洞去找;
也没有找到,就隔两个洞,到第六个洞去找。
以后每次多一个洞去找兔子……这样下去,如果一直找不到兔子,请问兔子可能在哪个洞中?
输入
有多组测试数据,读取到文件结尾符为止。
每组测试数据输入n(2≤n≤100),即洞穴个数。
输入到文件结尾符为止。
输出
兔子可能藏匿的洞。
如果不止一个,按从小到大的顺序输出。
如果不存在,输出空行。
样例输入
10
8
15
样例输出
2479
245789111214
提示
用一个数组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,则兔子可能藏身该洞中。
#include<
stdio.h>
string.h>
intok[110];
intmain()
{
intn,s,i,find;
while(scanf("
%d"
&
n)!
=EOF)
memset(ok,0,sizeof(ok));
for(i=1;
i<
=200;
i++)
if(!
ok[find=(i*(i+1)/2)%n])
if(find==0)
ok[n]=1;
else
ok[find]=1;
for(s=0,i=1;
=n;
s+=ok[i];
for(i=1,find=0;
ok[i])
if(find!
=(n-s-1))
printf("
%d"
i);
find++;
}
\n"
);
return0;
}
问题B:
趣味程序设计_巧夺偶数
174
73
桌子上有25颗棋子。
游戏双方轮流取子,每人每次最少取走一颗棋子,最多可取走3颗棋子。
双方照这样取下去,直到取光所有的棋子。
于是双方手中必然一方为偶数,一方为奇数,偶数方为胜者。
请编程实现人机游戏。
人先走,计算机后走。
若游戏结束,则输出“Gameover!
”。
输入人取走棋子的个数。
输入一次,按一次回车。
游戏不止一轮。
按下文件结尾符,退出游戏。
必须在完成一轮后退出游戏。
不得中途退出游戏。
输出计算机取走的个数,每次输出最优解。
1
2
3
Gameover!
intn,sum=25;
loop:
sum-=n;
if(sum==1)
1\nGameover!
sum=25;
gotoloop;
if(sum==3||sum==2)
1\n"
sum--;
{
if(sum<
=0)
}
%d\n"
4-n);
if(n==1)
sum-=3;
if(n==2)
sum-=2;
if(n==3)
sum-=1;
问题C:
趣味程序设计_五猴分桃
186
102
5只猴子一起摘了1堆桃子。
因为太累了,它们商量决定,先睡一觉再分。
过了不知多久,1只猴子来了。
它见别的猴子没来,便将这1堆桃子平均分成5份,结果多了1个,就将多的这个吃了,拿走其中的1堆。
又过了不知多久,第2只猴子来了。
它不知道有1个同伴已经来过,还以为自己是第1个到的呢。
于是将地上的桃子堆起来,平均分成5份,发现也多了1个,同样吃了这1个,拿走其中的1堆。
第3只、第4只、第5只猴子都是这样……问这5只猴子至少摘了多少个桃子?
第5个猴子走后还剩下多少个桃子?
无
输出5只猴子至少摘了多少个桃子,第5个猴子走后还剩下多少个桃子。
中间用空格隔开。
31211020
思路一:
“分”——假设至少摘了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/4*5+1)凑5次,则为所求。
time.h>
intfirst,i,t;
5000;
i+=5)
first=i;
for(t=1;
t<
=5;
t++)
if(first%5==1)
first=(first-1)/5*4;
if(t==5)
%d%d\n"
i,first);
break;
//
printf("
time:
%.2lf\n"
(double)clock()/CLOCKS_PER_SEC);
问题D:
趣味程序设计_高次方数
559
80
求13的n次方(12<
n≤130********0)的最后三位数。
例如:
13的13次方的最后三位数是253,13的20次方的最后三位数是801。
有多组测试数据,每组测试数据一行,即整数n。
以文件结尾符结束。
输出13的n次方的最后三位数
13
20
253
801
64位整型用longlong表示,格式串为"
%lld"
intfun(longlongn)
intk=13,t=1;
while(n>
0)
if(n%2==1)
t=t*k%1000;
k=k*k%1000;
n>
>
=1;
returnt;
longlongn;
%03d\n"
fun(n));
问题E:
趣味程序设计_借书方案
429
154
小明有n本新书,要借给A、B、C三位小朋友。
只借一次。
若每人每次只能借一本,则可以有多少种不同的借法?
有多组测试数据,输入整数n(5≤n≤1000),输入到文件结尾符为止。
借法总数。
5
6
7
60
120
210
336
%lld\n"
n*(n-1)*(n-2));
问题F:
趣味程序设计_过桥问题
102
19
过桥问题。
有N(N≥2)个人在晚上需要从X地到达Y地,中间要过一座桥,过桥需要手电筒(而他们只有1个手电筒),每次最多两个人一起过桥(否则桥会垮)。
N个人的过桥时间依次存入数组t[N]中,分别为:
t[0],t[1],……,t[N-1]。
过桥的速度以慢的人为准!
注意:
手电筒不能丢过桥!
问题是:
编程求这N个人过桥所花的最短时间。
有多组测试数据,
每组数据先输入一个人数N,然后输入这N个人过桥所花的时间。
输出对应的最短时间。
412510
452101
17
voidfun(int*a,intn)
inti,j,t,k;
for(i=0;
n-1;
k=i;
for(j=i+1;
j<
n;
j++)
if(a[j]<
a[k])
k=j;
if(i!
=k)
t=a[i];
a[i]=a[k];
a[k]=t;
inta[100],i,n,time,k;
time=0;
scanf("
a[i]);
fun(a,n);
k=n-1;
while
(1)
if(k<
=2)
if(k==0)
time+=a[0];
if(k==1)
time+=a[1];
if(k==2)
time+=(a[0]+a[1]+a[2]);
time);
if(2*a[1]>
=a[0]+a[k])
time+=(2*a[0]+a[k-1]+a[k]);
if(2*a[1]<
a[0]+a[k])
time+=(a[0]+2*a[1]+a[k]);
k-=2;
问题G:
趣味程序设计_数制转换
265
110
将任一整数转换为二进制数形式并输出。
有多行数据,每行输入一十进制数字n(1≤n≤2147483647)。
输出n的二进制表示
4
11
100
101
110
111
#include<
voidf(longlongnum)
if(num)
f(num/2);
num%2);
intmain(void)
longlongnum;
while(scanf("
&
num)!
=EOF)
f(num);
putchar('
\n'
问题H:
趣味程序设计_打渔晒网
205
28
中国有名俗语叫“三天打鱼两天晒网”。
小强从2000年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是在“打鱼”,还是在“晒网”?
输入日期,格式是yyyy-mm-dd,例如2012-01-23。
如果小强在打鱼,那么输出“Heisfishing.”。
如果小强子在晒网,那么输出“Heisdryingnets.”
2000-01-01
2000-01-05
Heisfishing.
Heisdryingnets.
源代码:
intfun(inta)
{
if(a%4==0&
&
a%100!
=0)
return1;
if(a%400==0)
return0;
intsumday(intyear,intmonth,intday)
intsum_day=0,a=0;
if(month>
2)
if(fun(year))
a=1;
=2)sum_day+=31;
=3)sum_day+=28;
=4)sum_day+=31;
=5)sum_day+=30;
=6)sum_day+=31;
=7)sum_day+=30;
=8)sum_day+=31;
=9)sum_day+=31;
=10)sum_day+=30;
=11)sum_day+=31;
=12)sum_day+=30;
sum_day=sum_day+a+day;
returnsum_day;
intsumyear(intyear)
intsum_year=0,i;
for(i=2000;
year;
i++)
{
sum_year+=(365+fun(i));
}
returnsum_year;
intmain()
intyear,month,day,sum,t;
while(scanf("
%d-%d-%d"
year,&
month,&
day)!
=EOF)
sum=sumday(year,month,day)+sumyear(year);
t=sum%5;
if(t==1||t==2||t==3)
printf("
Heisfishing.\n"
if(t==0||t==4)
Heisdryingnets.\n"
问题I:
趣味程序设计_喝酒问题
97
30
n个人同桌吃饭,其中一个是数学家,他出了一道难题:
假定桌子上有3瓶啤酒,将每瓶中的酒平分给几个人喝,但喝各瓶酒的人数是不一样的,不过其中有且只有一个人喝了每一瓶中的酒,且加起来刚好是一瓶,请问喝这3瓶酒的各有多少人?
有多组测试数据,每行输入总人数n。
输出这三杯酒分别被几个人喝,三个数字从小到大排列。
如果无解,输出“Nosolution”。
Nosolution
236
问题J:
趣味程序设计_哥德巴赫猜想
216
98
[提交][状态][