计算机C语言趣味的程序设计——题目百例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Contest - 2011级C语言课程大作业
Start Time: 2012-02-19 16:25:00 End Time: 2012-03-01 22:00:00 Current Time: 2012-2-23 15:51:18 Status:Running Public
写在最前:
本文档中的题目;在不不同的编译器中可能会有提示错误,呵呵,小小的动动手改下变量的定义就可以运行了………………..
由于能力不足..有题目未解决的…或者有错误的我会…认真听取大家的..意见的….
呵呵……..有一两个….偷了下懒哦………
提供原题目还有本人自己的解答的源代码。

感谢大家的。

建议…………….
问题A: 趣味程序设计_狼追兔子
时间限制: 1 Sec 内存限制: 128 MB
提交: 341 解决: 63
[提交][状态][讨论版]
题目描述
一只兔子躲进了n个环形分布的洞的某一个中。

狼在第一个洞没有找到兔子,就隔一个洞,到第三个洞去找;也没有找到,就隔两个洞,到第六个洞去找。

以后每次多一个洞去找兔子……这样下去,如果一直找不到兔子,请问兔子可能在哪个洞中?
输入
有多组测试数据,读取到文件结尾符为止。

每组测试数据输入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,则兔子可能藏身该洞中。

#include<stdio.h>
#include<string.h>
int ok[110];
int main()
{
int n,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;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++;
}
else
printf("%d",i);
}
printf("\n");
}
return 0;
}
问题B: 趣味程序设计_巧夺偶数
时间限制: 1 Sec 内存限制: 128 MB
提交: 174 解决: 73
[提交][状态][讨论版]
题目描述
桌子上有25颗棋子。

游戏双方轮流取子,每人每次最少取走一颗棋子,最多可取走3颗棋子。

双方照这样取下去,直到取光所有的棋子。

于是双方手中必然一方为偶数,一方为奇数,偶数方为胜者。

请编程实现人机游戏。

人先走,计算机后走。

若游戏结束,则输出“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<stdio.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\n");
sum--;
}
}
else
{
if(sum<=0)
{
printf("Game over!\n");
sum=25;
goto loop;
}
else
{
printf("%d\n",4-n);
if(n==1)
sum-=3;
if(n==2)
sum-=2;
if(n==3)
sum-=1;
}
}
}
return 0;
}
问题C: 趣味程序设计_五猴分桃
时间限制: 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个猴子走后还剩下多少个桃子?
输入

输出
输出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 / 4 * 5 + 1)凑5次,则为所求。

#include<stdio.h>
#include<time.h>
int main()
{
int first,i,t;
for(i=1;i<5000;i+=5)
{
first=i;
for(t=1;t<=5;t++)
{
if(first%5==1)
{
first=(first-1)/5*4;
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
[提交][状态][讨论版]
题目描述
求13的n次方(12<n≤130000000000)的最后三位数。

例如:13的13次方的最后三位数是253,13的20次方的最后三位数是801。

输入
有多组测试数据,每组测试数据一行,即整数n。

以文件结尾符结束。

输出
输出13的n次方的最后三位数
样例输入
13
20
样例输出
253
801
64位整型用 long long 表示,格式串为"%lld"
#include<stdio.h>
int fun(long long n)
{
int k=13,t=1;
while(n>0)
{
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 解决: 154
[提交][状态][讨论版]
题目描述
小明有n本新书,要借给A、B、C三位小朋友。

只借一次。

若每人每次只能借一本,则可以有多少种不同的借法?
输入
有多组测试数据,输入整数n (5≤n≤1000),输入到文件结尾符为止。

借法总数。

样例输入
5
6
7
8
样例输出
60
120
210
336
#include<stdio.h>
int main()
{
long long n;
while(scanf("%lld",&n)!=EOF)
printf("%lld\n",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个人过桥所花的最短时间。

输入
有多组测试数据,
每组数据先输入一个人数N,然后输入这N个人过桥所花的时间。

输出
输出对应的最短时间。

样例输入
4 1 2
5 10
4 5 2 10 1
样例输出
17
17
#include<stdio.h>
void fun(int *a,int n)
{
int i,j,t,k;
for(i=0;i<n-1;i++)
{
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;
}
}
}
int main()
{
int a[100],i,n,time,k;
while(scanf("%d",&n)!=EOF)
{
time=0;
for(i=0;i<n;i++)
scanf("%d",&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]);
printf("%d\n",time);
break;
}
else
{
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;
}
}
}
return 0;
}
问题G: 趣味程序设计_数制转换
时间限制: 1 Sec 内存限制: 128 MB
提交: 265 解决: 110
[提交][状态][讨论版]
题目描述
将任一整数转换为二进制数形式并输出。

输入
有多行数据,每行输入一十进制数字n(1≤n≤2147483647)。

输入到文件结尾符为止。

输出
输出n的二进制表示
样例输入
1
2
3
4
5
6
7
样例输出
1
10
11
100
101
110
111
#include <string.h>
#include <stdio.h>
void f(long long num)
{
if (num)
{
f(num/2);
printf("%lld", num % 2);
}
}
int main(void)
{
long long num;
while (scanf("%lld", &num) != EOF)
{
f(num);
putchar('\n');
}
return 0;
}
问题H: 趣味程序设计_打渔晒网
时间限制: 1 Sec 内存限制: 128 MB
提交: 205 解决: 28
[提交][状态][讨论版]
题目描述
中国有名俗语叫“三天打鱼两天晒网”。

小强从2000年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是在“打鱼”,还是在“晒网”?
输入
输入日期,格式是yyyy-mm-dd,例如2012-01-23。

输入到文件结尾符为止。

输出
如果小强在打鱼,那么输出“He is fishing.”。

如果小强子在晒网,那么输出“He is drying nets.”
样例输入
2000-01-01
2000-01-05
样例输出
He is fishing.
He is drying nets.
问题I: 趣味程序设计_喝酒问题
时间限制: 1 Sec 内存限制: 128 MB
提交: 97 解决: 30
[提交][状态][讨论版]
题目描述
n个人同桌吃饭,其中一个是数学家,他出了一道难题:假定桌子上有3瓶啤酒,将每瓶中的酒平分给几个人喝,但喝各瓶酒的人数是不一样的,不过其中有且只有一个人喝了每一瓶中的酒,且加起来刚好是一瓶,请问喝这3瓶酒的各有多少人?
输入
有多组测试数据,每行输入总人数n。

输入到文件结尾符为止。

输出
输出这三杯酒分别被几个人喝,三个数字从小到大排列。

如果无解,输出“No solution”。

样例输入
3
4
10
样例输出
No solution
No solution
2 3 6
问题J: 趣味程序设计_哥德巴赫猜想
时间限制: 1 Sec 内存限制: 128 MB
提交: 216 解决: 98
[提交][状态][讨论版]
题目描述
2000以内的不小于4的正偶数都能够分解为两个素数之和(即验证歌德巴赫猜想对2000以内的正偶数成立)。

输入
每行输入一组数据,即2000以内的正偶数n。

输入到文件结尾符为止。

输出
输出n能被分解成的素数,a和b。

如果不知一组解,输出a最小的那组解。

样例输入
4
6
8
10
12
样例输出
2 2
3 3
3 5
3 7
5 7
#include<math.h>
#include<stdio.h>
int fun(int n)
{
int i;
if(n==2)
return 1;
if(n%2==0)
return 0;
for(i=3;i<=sqrt(n);i+=2)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int n,i,ok;
while(scanf("%d",&n)!=EOF)
{
ok=0;
for(i=2;i<=n/2;i++)
{
if(fun(i))
if(fun(n-i))
{
printf("%d %d\n",i,n-i);
ok=1;
}
if(i!=2)
i++;
if(ok)
break;
}
}
return 0;
}
问题K: 趣味程序设计_打印日历
时间限制: 1 Sec 内存限制: 128 MB
提交: 89 解决: 8
[提交][状态][讨论版]
题目描述
打印出任意年份的日历。

提示:要判断该年份是否是闰年,若是闰年,二月为29天,
平年为28天。

而判断闰年的规则是:如果((该年能被4除尽且不能被100除尽)或能被400除尽),则该年是闰年。

输入
年份
输出
该年12个月的日历
样例输入
2012
样例输出
*Mon Tue Wed Thu Fri Sat Sun
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 26 27 28 29
30 31
*Mon Tue Wed Thu Fri Sat Sun
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 26
27 28 29
*Mon Tue Wed Thu Fri Sat Sun
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
26 27 28 29 30 31
*Mon Tue Wed Thu Fri Sat Sun
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 26 27 28 29 30
*Mon Tue Wed Thu Fri Sat Sun 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 26 27 28 29 30 31
*Mon Tue Wed Thu Fri Sat Sun 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 26 27 28 29 30
*Mon Tue Wed Thu Fri Sat Sun
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 26 27 28 29 30 31
*Mon Tue Wed Thu Fri Sat Sun 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 26 27 28 29 30 31
*Mon Tue Wed Thu Fri Sat Sun 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 26 27 28 29 30 *Mon Tue Wed Thu Fri Sat Sun 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 26 27 28 29 30 31
*Mon Tue Wed Thu Fri Sat Sun 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
26 27 28 29 30
*Mon Tue Wed Thu Fri Sat Sun
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 26 27 28 29 30
31
问题L: 趣味程序设计_抓交通肇事逃逸犯
时间限制: 1 Sec 内存限制: 128 MB
提交: 259 解决: 166
[提交][状态][讨论版]
题目描述
一辆卡车违反交通规则,撞人后逃跑,现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。

甲说:牌照的前2位数字是相同的;乙说:牌照的后2位数字是相同的,但与前2位不同;丙是位数学家,他说:4位的牌照号刚好是一个整数的平方。

请根据以上线索求出牌照号
输入

输出
输出满足要求车牌号
样例输入

样例输出

int main()
{
printf("7744\n");
return 0;
}
问题M: 趣味程序设计_反序数
时间限制: 1 Sec 内存限制: 128 MB
提交: 331 解决: 219
[提交][状态][讨论版]
题目描述
设N是一个四位数,它的9倍恰好是其反序数,求N。

输入

输出
输出满足要求的4位反序数
样例输入

样例输出

提示
反序数就是将整数的数字倒过来形成的整数。

例如:1234的反序数是4321.
int main()
{
int a,b,c,d,i;
for(i=1000;i<=2000;i++)
{
a=i/1000;
b=i/100%10;
c=i/10%10;
d=i%10;
if(i*9==(d*1000+c*100+b*10+a))
printf("%d\n",i);
}
return 0;
}
问题N: 趣味程序设计_新郎新娘
时间限制: 1 Sec 内存限制: 128 MB
提交: 278 解决: 97
[提交][状态][讨论版]
题目描述
三对情侣一起举行婚礼,三个新郎为A、B、C,三个新娘为X、Y、Z。

有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是这样的:A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚。

这人听后知道他们在开玩笑,全是假话,请编程找出谁将和谁结婚。

输入

输出
输出为一行
输出格式为*-*,表示*和*结婚,中间用空格隔开。


样例输出

#include<stdio.h>
int main()
{
printf("A-Z B-X C-Y\n");
return 0;
}
问题O: 趣味程序设计_称重砝码
时间限制: 1 Sec 内存限制: 128 MB
提交: 93 解决: 59
[提交][状态][讨论版]
题目描述
一位商人有4块砝码,各砝码重量不同且都是整磅数,而且用这4块砝码可以在天平上称1至40磅之间的任意重量(砝码可以放在天平的任一端),请问这4块砝码各重多少?
输入

输出
输出一行4个数表示4个砝码的重量,中间用空格隔开
样例输入


问题P: 趣味程序设计_求车速
时间限制: 1 Sec 内存限制: 128 MB
提交: 72 解决: 5
[提交][状态][讨论版]
题目描述
一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为n。

两小时后里程表上出现了一个新的对称数。

问该车的速度是多少?新的对称数是多少?
输入
第一行输入t(0<t<19999),接下来的t行输入一个n(0<n<10^9);
输出
每一行输出n的下一个对称数m。

样例输入
6
1
11
99
789987
123454321
999999999
样例输出
2
22
101
790097
123464321
1000000001
问题Q: 趣味程序设计_谁是窃贼
时间限制: 1 Sec 内存限制: 128 MB
提交: 295 解决: 138
[提交][状态][讨论版]
题目描述
警察审问四名窃贼嫌疑犯。

已知,这四人当中仅有一名是窃贼,还知道这四个人中每人要么是诚实的,要么总是说谎。

他们给警察的回答是:
甲说:“乙没有偷,是丁偷的。


乙说:“我没有偷,是丙偷的。


丙说:“甲没有偷,是乙偷的。


丁说:“我没有偷。


请根据这四个人的回答判断谁是窃贼。

输入

输出
请根据这四个人的回答判断谁是窃贼,窃贼用数值1表示,不是窃贼用0表示
一行输出四个数,中间用空格隔开(按甲,乙,丙,丁的顺序)
样例输入

样例输出

提示
假设用A、B、C、D分别代表四个人,变量的值为1代表该人是窃贼,则根据四个人的说法可列出4个条件:B+D=1;B+C=1;A+B=1;A+B+C+D=1。

#include<stdio.h>
int main()
{
int i,A=1,B=0,C=0,D=0;
for(i=1;i<=4;i++)
if(B+D==1&&B+C==1&&A+B==1)
{
printf("%d %d %d %d\n",A,B,C,D);
break;
}
else
{
if(i==1)
{
A=0;B=1;
}
if(i==2)
{
B=0;C=1;
}
if(i==3)
{
C=0;D=1;
}
}
return 0;
}
问题R: 趣味程序设计_出售金鱼
时间限制: 1 Sec 内存限制: 128 MB
提交: 191 解决: 25
[提交][状态][讨论版]
题目描述
令狐冲将养的一缸金鱼分5次出售:第1次卖出全部的一半加1/2条;第2次卖出余下的三分之一加1/3条;第3次卖出余下的四分之一加1/4条;第4次卖出余下的五分之一加1/5条;最后卖出余下的11条。

问原来鱼缸中共有多少条鱼?答案是59条。

为了防止大家混AC,题目稍微改一下。

令狐冲将养的一缸金鱼分m次出售(m的取值为2,或3,或4,或5):第1次卖出全部的一半加1/2条;第2次卖出余下的三分之一加1/3条;第3次卖出余下的四分之一加1/4条;第4次卖出余下的五分之一加1/5条;......;第m-1次卖出余下的m分之一加1/m条,最后卖出余下的11条。

问原来鱼缸中共有多少条鱼?
若输入的m是5,则答案仍是59条。

输入
每行输入一个m值,m的取值为2,或3,或4,或5。

输出
对应输出原来鱼缸中共有多少条鱼?,输出一个数字即可。

样例输入
5
4
3
2
4
样例输出
59
47
35
23
47
提示
从X=23开始试探,步长取2,前4次中,第i次出售后留下:X=X-(X+1)/(i+1),第4次出售后余下11条。

#include<stdio.h>
int main()
{
int a,i,n;
while(scanf("%d",&n)!=EOF)
{
a=11;
for(i=n;i>=2;i--)
{
a=(a*i+1)/(i-1);
}
printf("%d\n",a);
}
return 0;
}
问题S: 趣味程序设计_百钱百鸡
时间限制: 1 Sec 内存限制: 128 MB
提交: 446 解决: 182
[提交][状态][讨论版]
题目描述
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
输入

输出
输出翁、母、雏各几何?可能有多组,一组一行,数字之间用空格隔开。

样例输入

样例输出

提示
设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:5x+3y+z/3=100及x+y+z=100。

所以此问题可归结为求这个不定方程的整数解。

可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。

#include<stdio.h>
int main()
{
int a,b;
for(a=0;a<20;a++)
for(b=1;b<33;b++)
if((5*a+3*b+(100-a-b)/3)==100&&((100-a-b)%3== 0))
printf("%d %d %d\n",a,b,100-a-b);
return 0;
}
问题T: 趣味程序设计_谜语博士
时间限制: 1 Sec 内存限制: 128 MB
提交: 131 解决: 97
[提交][状态][讨论版]
题目描述
诚实族和说谎族是来自两个岛屿的不同民族,诚实族的人永远说真话,而说谎族的人永远说假话,一天,谜语博士遇到三个人,知道他们可能是来自诚实族或说谎族的。

为了调查这三个人是什么族的,博士分别问了他们问题,下面是他们的对话:
博士问:“你们是什么族的?”
第一个人答:“我们之中有两个来自诚实族。


第二个人说:“不要胡说,我们之中只有一个诚实族的。


第三个人接着说:“对,就是只有一个诚实族的。


请根据他们的回答判断他们分别是哪个族的.
输入

输出
设说谎其值为0,诚实其值为1,输出这三个人的的值在一行上,中间用空格隔开
样例输入

样例输出

提示
假设这三个人分别为A、B、C,若说谎其值为0,若诚实其值为1,根据题目中三个人的话可分别列出:
第一个人:a&&a+b+c==2 || !a&&a+b+c!=2
第二个人:b&&a+b+c==1 || !b&&a+b+c!=1
第三个人:c&&a+b+c==1 || !c&&a+b+c!=1
#include<stdio.h>
int main()
{
int a,b,c;
{
for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
for(c=0;c<=1;c++)
if(a&&a+b+c==2
|| !a&&a+b+c!=2)
if(b&&a+b+c==1
|| !b&&a+b+c!=1)
if(c&&a+b+c== 1 || !c&&a+b+c!=1)
{
print f("%d %d %d\n",a,b,c);
retur n 0;
}
}
return 0;
}
问题U: 趣味程序设计_猜牌术(-)
时间限制: 1 Sec 内存限制: 128 MB
提交: 85 解决: 23
[提交][状态][讨论版]
题目描述
魔术师利用一幅牌中13张黑桃,预先将它们排好后迭在一起,牌面朝下,对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看,魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,将黑桃A话在桌子上,然后按顺序从上到下数手中的余牌,第二次数1、2,将第一张牌放在这迭牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1、2、3,将前面两张依次放在这迭牌的下面,再翻第三张牌正好是黑桃3,这样依次进行,将13张牌全部翻出来,准确无误。

问魔术师手中的牌原始次序是怎样安排的?
如果不是确定的13张牌,而是n张牌呢?
输入
每行输入一个n值(n不超过100),表示牌的总张数.
对应的原始排列次序.
样例输入
15
14
13
样例输出
1 11
2 8 7
3 13 9 6
4 1
5 14 12 10 5
1 5
2 14 12
3 11 7 8
4 6 13 10 9
1 8
2 5 10
3 12 11 9
4 7 6 13
问题V: 趣味程序设计_舍罕王的失算
时间限制: 1 Sec 内存限制: 128 MB
提交: 316 解决: 73
[提交][状态][讨论版]
题目描述
相传国际象棋是古印度舍罕王的宰相达依尔发明的。

舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。

这位聪明的宰相指着8X8共64格的象棋棋盘说:陛下,请您赏给我一些麦子吧。

就在棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上64格,我就感激不尽了。

舍罕王让人扛来一袋麦子,他要兑现他的许诺。

请问,国王能兑现他的许诺吗?共要多少麦子赏赐他的宰相?
格子数不是64呢?
输入
输入n表示格子数(n不超过64).
输出麦子总数.
样例输入
3
64
样例输出
7
18446744073709551615
提示
数据类型,在VC中调试用unsigned __int64,提交时改成unsigned long long
#include<stdio.h>
int main()
{
unsigned long long sum,t;
int n,i;
while(scanf("%d",&n)!=EOF)
{
sum=t=1;
for(i=2;i<=n;i++)
{
t=t*2;
sum+=t;
}
if(n==64)
printf("18446744073709551615\n");
else
printf("%lld\n",sum);
}
return 0;
}
问题W: 趣味程序设计_怎样存钱利最大
时间限制: 1 Sec 内存限制: 128 MB
提交: 40 解决: 8
[提交][状态][讨论版]
题目描述
假设银行整存整取存款不同期限的月息利率分别为:
0.63% 期限=1年
0.66% 期限=2年
0.69% 期限=3年
0.75% 期限=5年
0.84% 期限=8年
利息=本金*月息利率*12*存款年限。

现在某人手中有2000元钱,请通过计算选择一种存钱方案,使得钱存入银行20年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。

提示:为了得到最多的利息,存入银行的钱应在到期时马上取出来,然后立刻将原来的本金和利息加起来再作为新的本金存入银行,这样不断地滚动直到满20年为止,由于存款的利率不同,所以不同的存款方法(年限)存20年得到的利息是不一样的。

分析题意,设2000元存20年,其中1年存i1次,2年存i2次,3年存i3次,5年存i5次,8年存i8次,则到期时存款人应得到的本利合计为:
2000*(1+rate1)i1*(1+rate2)i2*(1+rate3)i3*(1+rate5)i5*(1+rate8)i8
其中rateN为对应存款年限的利率。

根据题意还可得到以下限制条件:
0<=i8<=2
0<=i5<=(20-8*i8)/5
0<=i3<=(20-8*i8-5*i5)/3
0<=i2<=(20-8*i8-5*i5-3*i3)/2
0<=i1=20-8*i8-5*i5-3*i3-2*i2
可以用穷举法穷举所有的i8、i5、i3、i2和i1的组合,代入求本利的公式计算出最大值,就是最佳存款方案。

输入
输出
样例输入
0.63,0.66,0.69,0.75,0.84
0 4 0 0 0
8841.01
问题X: 趣味程序设计_猜牌术(二)
时间限制: 1 Sec 内存限制: 128 MB
提交: 37 解决: 4
[提交][状态][讨论版]
题目描述
魔术师将红桃和黑桃全部迭在一起,牌面朝下放在手中,对观众说:最上面一张是黑桃A,翻开后放在桌上。

以后,从上至下每数两张依次放在最底下,第三张给观众看,便是黑桃2,放在桌上后再数两张依次放在最底下,第三张给观众看,是黑桃3。

如此下去,观众看到放在桌子上的牌的顺序是:
黑桃A2345678910J Q K
红桃A2345678910J Q K
问魔术师此次手中牌的原始顺序是什么?
输入
输入2个字符,((r-红桃;b-黑桃; m-梅花; f-方块):
输出
输出原始顺序.
若输入r b
则输出
b1 r6 b10 b2 r12 r3 b3 b11 r9 b4 r7 b12 b5
r4 r13 b6 b13 r11 b7 r5 r1 b8 r8 r10 b9 r2
样例输入
r,b
b1 r6 b10 b2 r12 r3 b3 b11 r9 b4 r7 b12 b5
r4 r13 b6 b13 r11 b7 r5 r1 b8 r8 r10 b9 r2
问题Y: 趣味程序设计_爱因斯坦的数学题
时间限制: 1 Sec 内存限制: 128 MB
提交: 396 解决: 121
[提交][状态][讨论版]
题目描述
爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。

只有每次跨7阶,最后才正好一阶不剩。

请问在1到N内,有多少个数能满足?
输入
每一行只有一个n;
输出
输出满足条件的个数。

每个答案一行。

样例输入
1999999
样例输出
9524
#include<stdio.h>
int main()
{
long n,sum,i;
while(scanf("%ld",&n)!=EOF)
{
sum=0;
for(i=7;i<=n;i++)
if(i%7==0)
if(i%6==5)
if(i%5==4)
if(i%3==2)
sum++;
printf("%ld\n",sum);
}
return 0;
}
问题Z: 趣味程序设计_取火柴游戏
时间限制: 1 Sec 内存限制: 128 MB
提交: 40 解决: 32
[提交][状态][讨论版]
题目描述
现有n根火柴,两人轮流取,每人每次可以取走1至4根,不可多取,也不能不取,谁取最后一根火柴谁胜。

现给一个n,请你断出谁胜。

输入
每一行只有一个n(0<n<100000000);
输出
如果是先手胜,输出yes,否则输出no;每个答案一行。

样例输入
10
样例输出
no
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
if(n%5==0)
printf("no\n");
else
printf("yes\n");
return 0;
}
问题: 趣味程序设计_平分鱼和筐
时间限制: 1 Sec 内存限制: 128 MB
提交: 15 解决: 5
[提交][状态][讨论版]
题目描述
甲、乙、丙三位渔夫出海打鱼,他们随船带了3*n只箩筐。

当晚返航时,他们发现有n筐装满了鱼,还有n筐装了半筐鱼,另外n筐则是空的,由于他们没有秤,只好通过目测认为n个满筐鱼的重量是相等的,n个半筐鱼的重量是相等的。

在不将鱼
倒出来的前提下,将鱼和筐平分为三份,共有多少种分法。

输入
每一行只有一个n(1=<n<=500);
输出
对于每个n,输出一个答案,每个答案一行;
7
样例输出
6
问题: 趣味程序设计_可逆素数
时间限制: 1 Sec 内存限制: 128 MB
提交: 242 解决: 124
[提交][状态][讨论版]
题目描述
可逆素数指:一个素数将其各位数字的顺序倒过来构成的反序数也是素数。

请从小到大输出所有四位数的可逆素数。

输入

输出
1009
1021
1031.
.
.
.
9941
9967
样例输出
#include<math.h>
#include<stdio.h>
int fun(int n)
{
int i;
if(n==2)
return 1;
if(n%2==0)
return 0;
for(i=3;i<=sqrt(n);i+=2)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int a,b,c,d;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=1;d<=9;d++)
if(fun(a*1000+b*100+c*10+d))
if(fun(a+b*10+c*100+d*1000))
printf("%d\n",a*1000+ b*100+c*10+d);
return 0;
}
问题: 趣味程序设计_三色球问题
时间限制: 1 Sec 内存限制: 128 MB
提交: 195 解决: 72
[提交][状态][讨论版]
题目描述
若一个口袋中放有a个红的,b个白的和c个黒的,问从中任取n个共有多少种不同的颜色搭配?
输入
多组数据,每组一行,a,b,c,n,都不大于100
输出
每个答案一行
样例输入
1 1 1 1
样例输出
3
#include<stdio.h>
int main()
{
int a,b,c,n,i,j,sum;
while(scanf("%d %d %d %d",&a,&b,&c,&n)!=EOF)
{
sum=0;
for(i=0;(i<=a)&&(i<=n);i++)
for(j=0;(j<=b)&&(j<=n);j++)
if((n-i-j)<=c&&(n-i-j)>=0)
sum++;
printf("%d\n",sum);
}
return 0;
}
问题: 趣味程序设计_抢n游戏
时间限制: 1 Sec 内存限制: 128 MB
提交: 67 解决: 14
[提交][状态][讨论版]
题目描述
这是中国民间的一个游戏。

两人从1开始轮流报数,每人每次可报一个数或两个连续的数,谁先报到n(n<1000000001),谁就为胜方。

现要你判断是先手胜还是后手胜。

输入
每一行只有一个n;
输出
如果是先手胜,输出no,否则输出yes;
样例输入
10
样例输出
no
#include<stdio.h>
int main()
{
long n;
while(scanf("%ld",&n)!=EOF)
printf("%s\n",n%3==0?"yes":"no");
return 0;
}。

相关文档
最新文档