收藏 分销(赏)

C语言趣味程序设计——题目百例.doc

上传人:pc****0 文档编号:7198840 上传时间:2024-12-27 格式:DOC 页数:43 大小:268KB 下载积分:10 金币
下载 相关 举报
C语言趣味程序设计——题目百例.doc_第1页
第1页 / 共43页
C语言趣味程序设计——题目百例.doc_第2页
第2页 / 共43页


点击查看更多>>
资源描述
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 Problem ID Title Y 1211 Problem A 趣味程序设计_狼追兔子 Y 1212 Problem B 趣味程序设计_巧夺偶数 Y 1213 Problem C 趣味程序设计_五猴分桃 Y 1214 Problem D 趣味程序设计_高次方数 Y 1215 Problem E 趣味程序设计_借书方案 Y 1216 Problem F 趣味程序设计_过桥问题 Y 1217 Problem G 趣味程序设计_数制转换 1218 Problem H 趣味程序设计_打渔晒网 N 1219 Problem I 趣味程序设计_喝酒问题 Y 1220 Problem J 趣味程序设计_哥德巴赫猜想 1221 Problem K 趣味程序设计_打印日历 Y 1222 Problem L 趣味程序设计_抓交通肇事逃逸犯 Y 1223 Problem M 趣味程序设计_反序数 Y 1224 Problem N 趣味程序设计_新郎新娘 1225 Problem O 趣味程序设计_称重砝码 1226 Problem P 趣味程序设计_求车速 Y 1227 Problem Q 趣味程序设计_谁是窃贼 Y 1228 Problem R 趣味程序设计_出售金鱼 Y 1229 Problem S 趣味程序设计_百钱百鸡 Y 1230 Problem T 趣味程序设计_谜语博士 1231 Problem U 趣味程序设计_猜牌术(-) Y 1232 Problem V 趣味程序设计_舍罕王的失算 1233 Problem W 趣味程序设计_怎样存钱利最大 1234 Problem X 趣味程序设计_猜牌术(二) Y 1235 Problem Y 趣味程序设计_爱因斯坦的数学题 Y 1236 Problem Z 趣味程序设计_取火柴游戏 1237 Problem a 趣味程序设计_平分鱼和筐 Y 1238 Problem b 趣味程序设计_可逆素数 Y 1239 Problem c 趣味程序设计_三色球问题 Y 1240 Problem d 趣味程序设计_抢n游戏 写在最前: 本文档中的题目;在不不同的编译器中可能会有提示错误,呵呵,小小的动动手改下变量的定义就可以运行了……………….. 由于能力不足..有题目未解决的…或者有错误的我会…认真听取大家的..意见的…. 呵呵……..有一两个….偷了下懒哦……… 提供原题目还有本人自己的解答的源代码。感谢大家的。。。。建议……………. 问题 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. 源代码: #include<stdio.h> int fun(int a) { if(a%4==0&&a%100!=0) return 1; if(a%400==0) return 1; return 0; } int sumday(int year,int month,int day) { int sum_day=0,a=0; if(month>2) if(fun(year)) a=1; if(month>=2) sum_day+=31; if(month>=3) sum_day+=28; if(month>=4) sum_day+=31; if(month>=5) sum_day+=30; if(month>=6) sum_day+=31; if(month>=7) sum_day+=30; if(month>=8) sum_day+=31; if(month>=9) sum_day+=31; if(month>=10) sum_day+=30; if(month>=11) sum_day+=31; if(month>=12) sum_day+=30; sum_day=sum_day+a+day; return sum_day; } int sumyear(int year) { int sum_year=0,i; for(i=2000;i<year;i++) { sum_year+=(365+fun(i)); } return sum_year; } int main() { int year,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("He is fishing.\n"); if(t==0||t==4) printf("He is drying nets.\n"); } return 0; } 问题 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位的牌照号刚好是一个整数的平方。请根据以上线索求出牌照号 输入 无 输出 输出满足要求车牌号 样例输入 无 样例输出 无 #include<stdio.h> int main() {     printf("7744\n");     return 0; } 问题 M: 趣味程序设计_反序数 时间限制: 1 Sec  内存限制: 128 MB 提交: 331  解决: 219 [提交][状态][讨论版] 题目描述 设N是一个四位数,它的9倍恰好是其反序数,求N。 输入 无 输出 输出满足要求的4位反序数 样例输入 无 样例输出 无 提示 反序数就是将整数的数字倒过来形成的整数。 例如:1234的反序数是4321. #include<stdio.h> 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的下一个对称数
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服