ACM11.docx
- 文档编号:26730537
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:129
- 大小:113.19KB
ACM11.docx
《ACM11.docx》由会员分享,可在线阅读,更多相关《ACM11.docx(129页珍藏版)》请在冰豆网上搜索。
ACM11
母牛的故事2
寻找四位数4
百马百担问题;5
逆波兰表达式7
汽车加油8
校门外的树10
判断S字符串是否"回文"的递归程序12
埃及分数14
币种统计问题15
分治法求一组数的和17
数列积差问题18
findthenthdigit21
487-327923
数制转换27
数塔29
最大子段和32
最长上升子序列34
毛毛虫的难题36
HammingProblem38
采药41
ProblemA:
最少城市问题43
ProblemD:
七巧板涂色问题46
ProblemF:
走迷宫问题48
ProblemC:
全排列问题50
ProblemE:
八皇后问题53
Palindrome56
ProblemG:
布线问题58
ProblemB:
小偷的难题62
ProblemH:
找出走出迷宫的一条最短路径63
ProblemI:
总统选举问题66
删数问题68
最大最小两个数.69
数棋子70
月份翻译71
整数问题72
求连续和问题.73
多少个零;74
打印如下图形75
打印如下图形76
AreYouBusy77
HelpLittleA79
Joseph81
文章排版问题82
集合问题83
最长公共子序列84
TotheMax85
雇佣计划86
滑雪88
工作分配问题89
LELE的RPG难题90
MovingTables91
小世界94
AMathematicalCuriosity95
玛雅历97
今年暑假不AC99
UniformGenerator100
Packets102
A*b/c104
Substrings105
LosingMobilePhone(2010年辽宁赛区网络竞赛题)106
SoManySkirt(2010年辽宁赛区网络竞赛题)108
儿童排队109
生理周期110
数根112
Thearea113
A+BforInput-OutputPractice115
Elevator116
Encoding117
HoldingBin-LadenCaptive!
118
Ants120
LettheBalloonRise121
成绩排名122
母牛的故事
TimeLimit:
1000MS MemoryLimit:
65536K
TotalSubmit:
472Accepted:
155
Description
有一头母牛,它每年年初生一头小母牛。
每头小母牛从第四个年头开始,每年年初也生一头小母牛。
请编程实现在第n年的时候,共有多少头母牛?
Input
输入数据由多个测试实例组成,每个测试实例占一行,
包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
SampleInput
2
4
5
0
SampleOutput
2
4
6
Source
∙#include
∙
∙intmain()
∙{
∙intn,i,a[100];
∙while(scanf("%d\n",&n)!
=EOF&&n>0)
∙{
∙for(i=1;i<=n;i++)
∙{
∙if(i<=3)
∙a[i]=i;
∙
∙else
∙a[i]=a[i-3]+a[i-1];
∙}
∙printf("%d\n",a[i-1]);
∙
∙}
∙
∙
∙return0;
∙}
寻找四位数
TimeLimit:
1000MS MemoryLimit:
65536K
TotalSubmit:
156Accepted:
127
Description
寻找满足下列条件的4位数;1.无重复数字;2.千位数字非0;3.能整除它的各位数字和的平方
Input
无
Output
输出满足条件的所有数,数之间用空格区分;
SampleInput
SampleOutput
Source
∙#include
∙intmain()
∙{
∙inti,a[4];
∙for(i=1000;i<=9999;i++)
∙{
∙a[0]=i/1000;
∙a[1]=(i%1000)/100;
∙a[2]=(i%100)/10;
∙a[3]=i%10;
∙if((i%(a[0]+a[1]+a[2]+a[3])*(a[0]+a[1]+a[2]+a[3])==0)
∙&&((a[0]!
=a[1])&&(a[1]!
=a[2])&&(a[2]!
=a[3])))
∙printf("%d",i);
∙
∙}
∙return0;
∙}
百马百担问题;
TimeLimit:
1000MS MemoryLimit:
65536K
TotalSubmit:
167Accepted:
124
Description
有100匹马,驮100担货.大马驮3担,中马驮2担,两匹小马驮1担,问有大、中、小马各多少?
Input
无
Output
输出所有可能的情况,每种情况占一行;每行输出3个数,分别表示大、中、小马的数量。
中间用空格区分。
注:
如果有很多组解,输出的次序是按照大马的数量的升序依次输出。
SampleInput
SampleOutput
Source
∙#include
∙intmain()
∙{
∙intx,y,z;
∙for(x=0;x<34;x++)
∙for(y=0;y<=50;y++)
∙{
∙z=100-x-y;
∙if((3*x+2*y+z/2)==100)
∙printf("%d%d%d\n",x,y,z);
∙}
∙return0;
∙}
逆波兰表达式
TimeLimit:
1000MS MemoryLimit:
65536K
TotalSubmit:
246Accepted:
98
Description
逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2+3的逆波兰表示法为+23。
逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2+3)*4的逆波兰表示法为*+234。
本题求解逆波兰表达式的值,其中运算符包括+-*/四个。
Input
输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。
Output
输出为一行,表达式的值。
可直接用printf("%f\n",v)输出表达式的值v。
SampleInput
*+11.012.0+24.035.0
SampleOutput
1357.000000
Hint
可使用atof(str)把字符串转换为一个double类型的浮点数。
atof定义在stdlib.h中。
此题可使用函数递归调用的方法求解。
Source
∙#include
∙#include"stdlib.h"
∙#include
∙doubleexp(){
∙chara[10];
∙scanf("%s",a);
∙switch(a[0]){
∙case'+':
returnexp()+exp();break;
∙case'-':
returnexp()-exp();break;
∙case'*':
returnexp()*exp();break;
∙case'/':
returnexp()/exp();break;
∙default:
returnatof(a);
∙}
∙}
∙intmain()
∙{
∙doubleans;
∙ans=exp();
∙printf("%lf",ans);
∙return0;
∙}
汽车加油
TimeLimit:
1000MS MemoryLimit:
65536K
TotalSubmit:
293Accepted:
100
Description
一辆汽车加满油后可行驶n公里。
旅途中有若干个加油站。
设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。
对于给定的n和k个加油站位置,编程计算最少加油次数。
Input
第一行有2个正整数n和k,表示汽车加满油后可行驶n公里,且旅途中有k个加油站。
接下来的1行中,有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。
第0个加油站表示出发地,汽车已加满油。
第k+1个加油站表示目的地
Output
输出最少加油次数,如果无法到达目的地,则输出NoSolution
SampleInput
77
12345166
SampleOutput
4
Source
∙#include
∙intmain()
∙{
∙intn,m,k,i,j,sum,t;
∙inta[1000];
∙scanf("%d%d",&n,&m);
∙sum=0;
∙for(i=0;i<=m;i++)
∙{
∙scanf("%d",&a[i]);
∙}
∙k=n;t=0;
∙for(i=m;i>=0;i--)
∙{
∙if(k-a[i]>=0)k-=a[i];
∙else
∙{
∙sum++;
∙k=n-a[i];
∙if(k<0)t=1;
∙}
∙//k=n;
∙
∙}
∙if(sum>m)t=1;
∙if(t==1)printf("NoSolution\n");
∙elseprintf("%d\n",sum);
∙return0;
∙
∙}
∙
校门外的树
TimeLimit:
1000MS MemoryLimit:
65536K
TotalSubmit:
448Accepted:
117
Description
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。
我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
马路上有一些区域要用来建地铁,这些区域用它们在数轴上的起始点和终止点表示。
已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。
现在要把这些区域中的树(包括区域端点处的两棵树)移走。
你的任务是计算将这些树都移走后,马路上还有多少棵树。
Input
输入的第一行有两个整数L(1<=L<=10000)和M(1<=M<=100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。
接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
Output
输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
SampleInput
5003
150300
100200
470471
SampleOutput
298
Source
∙#include
∙intmain()
∙{
∙intL,i,j,n;
∙booltrees[10001];
∙for(i=0;i<10001;i++)
∙trees[i]=true;
∙scanf("%d%d",&L,&n);
∙for(i=0;i ∙{ ∙intbegin,end; ∙scanf("%d%d",&begin,&end); ∙if(begin ∙for(j=begin;j<=end;j++) ∙trees[j]=false; ∙else ∙for(j=end;j<=begin;j++) ∙trees[j]=false; ∙} ∙intcount=0; ∙for(i=0;i<=L;i++) ∙if(trees[i])count++; ∙printf("%d\n",count); ∙return0; ∙} 判断S字符串是否"回文"的递归程序 TimeLimit: 1000MS MemoryLimit: 65536K TotalSubmit: 222Accepted: 112 Description "回文"字符串就是左右对称的字符串; Input 输入一个字符串,长度<100; Output 如果是回文则输出"YES",否则输出"NO" SampleInput 12345654321 SampleOutput YES Source ∙#include ∙#include ∙intf(char*a) ∙{ ∙for(inti=0;i! ='\n';i++) ∙{ ∙if(a[i]=a[strlen(a)-1]) ∙; ∙elsereturn0; ∙} ∙return1; ∙} ∙ ∙intmain() ∙{ ∙chara[100]; ∙ ∙scanf("%s",&a); ∙ ∙if(f(a)) ∙printf("YES"); ∙else ∙printf("NO"); ∙ ∙return0; ∙} 埃及分数 TimeLimit: 1000MS MemoryLimit: 65536K TotalSubmit: 247Accepted: 112 Description 设计一个算法,把一个真分数表示为埃及分数之和的形式.所谓埃及分数是指分子为1的分数.如7/8=1/2+1/3+1/24; Input 输入一个真分数,a/b; Output 输出所有埃及分数之和.中间用空格区分. SampleInput 7/8 SampleOutput 1/21/31/24 Source ∙#include ∙intmain() ∙{ ∙inta,b,c; ∙chard; ∙scanf("%d%c%d",&a,&d,&b); ∙if(a>=b) ∙printf("error! "); ∙else ∙if((a==1)||(b%a==0)) ∙printf("1/%d",b/a); ∙else ∙{ ∙while(a! =1) ∙{ ∙c=b/a+1; ∙a=a*c-b; ∙b=b*c; ∙printf("1/%d",c); ∙if(a>1) ∙printf(""); ∙if((b%a==0)||(a==1)) ∙{ ∙printf("1/%d",b/a); ∙a=1; ∙} ∙} ∙} ∙return0; ∙} 币种统计问题 TimeLimit: 1000MS MemoryLimit: 65536K TotalSubmit: 172Accepted: 121 Description 某单位给每个职工发工资,为了保证不要临时兑换零钱,且取款的张数最少,取工资前要统计出所给职工的工资所需各种币值(100,50,20,10,5,2,1元共7种)的张数,请编程实现. Input 输入一个职工钱数. Output 最少张数. SampleInput 150 SampleOutput 2 Source ∙#include ∙intmain() ∙{ ∙inta,count=0,sum=0; ∙scanf("%d",&a); ∙intqian[8]={0,100,50,20,10,5,2,1}; ∙intshu[8]={0,0,0,0,0,0,0,0}; ∙for(inti=1;i<8;i++) ∙{ ∙count=a/qian[i]; ∙shu[i]=count; ∙a=a-count*qian[i]; ∙} ∙for(intj=1;j<8;j++) ∙{ ∙sum+=shu[j]; ∙} ∙printf("%d",sum); ∙return0; ∙} 分治法求一组数的和 TimeLimit: 1000MS MemoryLimit: 65536K TotalSubmit: 185Accepted: 104 Description 给定一组数据,用分治法求和 Input 输入共两行,第一行为数的个数,第二行为数,中间用空格区分. Output 输出和 SampleInput 10 1234567810 SampleOutput 55 Source ∙#include ∙intmain() ∙{ ∙intcount,a[1000],sum=0; ∙scanf("%d",&count); ∙for(inti=0;i ∙{ ∙scanf("%d",&a[i]); ∙sum+=a[i]; ∙} ∙printf("%d",sum); ∙return0; ∙} 数列积差问题 TimeLimit: 1000MS MemoryLimit: 65536K TotalSubmit: 174Accepted: 71 Description 在黑板上写n个正整数排成一个数列,进行如下操作: 每次擦去其中的两个数a,b,然后在数列中加入一个数a*b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的记为max,最小的记为min,则该数列的极差定义为max-min. Input 输入两行数,第一行输入一个整数n,第二行输入n个整数. Output 输出一行,即极差. SampleInput 4 1234 SampleOutput 13 Source ∙#include ∙ints1,s2; ∙intcmax(int*a,intcount) ∙{ ∙ ∙while(count>2) ∙{ ∙ ∙if(a[1]<=a[2]) ∙{ ∙s1=1; ∙s2=2; ∙} ∙else ∙{ ∙s1=2; ∙s2=1; ∙ ∙} ∙for(intj=3;j<=count;j++) ∙{ ∙if(a[j] ∙{ ∙s2=s1; ∙s1=j; ∙}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ACM11