ACM刷题
来源:互联网 发布:阿里云上海当面核验 编辑:程序博客网 时间:2024/06/07 21:16
1.<杭电1001> calculate SUM(n) = 1 + 2 + 3 + ... + n.
input:The input will consist of a series of integers n, one integer per line.
output:For each case, output SUM(n) in one line, followed by a blank line. You may assume the result will bein the range of 32-bit signed integer.
sample input:
1
100
sample output:
1
5050
code:
#include<stdio.h>int main(){int i,n,sum;while(scanf("%d",&n)!=EOF){sum=0;for(i=0;i<=n;i++)sum+=i;printf("%d\n\n",sum);}return 0; }
这里要注意防止数值溢出,,避免采用n*(n+1).据网上一段代码:#include<stdio.h>int main(){int n,sum;while(scanf("%d",&n)!=EOF){if(n%2==0)sum=n/2*(n+1);else sum=(n+1)/2*n; printf("%d\n\n",sum);return 0;}}
这样似乎可以防止溢出。
2.ASCII排序问题
这里需要注意的是,输入时,需要while(scanf("%c%c%c%c",&a,&b,&c,&d)!=EOF),来抵消掉最后一个换行符!!!
3.while(n--)
{ scanf("%d %d",&a,&b); printf("%d\n",a+b);等同于
for(i=0;i<N;i++){scanf("%d%d",&a,&b);printf("%d\n",a+b);}
4.有时候要注意数据精度,例如杭电2003题,必须要用double类型定义输入数据才行,一个可信服的解释是
应该是计算精度的问题,如果该实数很大的话,用float的话,会出现精度误差。如果内存不是非常紧张,最好还是用double,因为计算机在计算的时候,是用double算的,用float反而要消耗时间去转化
5.字符串比较问题。
题目:Tetrahedron:有4个三角形面
Cube:有6个正方形面
Octahedron:有8个三角形面
Dodecahedron:有12个五边形面
Icosahedron:有20个三角形面(首字母为i的大写)
现在小明有n个正多面体,他想知道这些多面体一共有多少个面
输入说明:第一行为一个整数n(1≤n≤200000),表示正多面体的数量。接下来n行,每一行为正多面体的种类,用上面所给的5个英文字符串表示。注意英文字母大小写是区分的
输出说明:输出总面数
输入样例:
4[EOL]
Icosahedron[EOL]
Cube[EOL]
Tetrahedron[EOL]
Dodecahedron[EOL]
3[EOL]输出样例:
Dodecahedron[EOL]
Octahedron[EOL]
Octahedron[EOF]
42[EOL]
28[EOF]程序:
#include<stdio.h>#include<string.h>int main(){int n,i,j; while(scanf("%d",&n)!=EOF){int sum=0;for(i=0;i<=n;i++){char s[15];gets(s);if(strcmp(s,"Tetrahedron")==0)sum+=4;if(strcmp(s,"Cube")==0)sum+=6;if(strcmp(s,"Octahedron")==0)sum+=8;if(strcmp(s,"Dodecahedron")==0)sum+=12;if(strcmp(s,"Icosahedron")==0)sum+=20;}printf("%d\n",sum);}return 0; }注意这里需要用到的字符串比较!
6.组合数问题
训练赛共有n道题目, 其中有m道签到题(能AC的简单题),小明打算从其中任意选出k道题目来做,那么他不爆零的方案数是多少
输入说明:第一行输入一个T, 表示数据组数.下面T组数据, 每组输入三个整数n, m, k。0 < n <= 12, 0 <= m <= n, 0 < k <= n
输出说明:每组输出一个整数表示RBB不爆零的方案数, 每组输出换行.
输入样例:
2[EOL]输出样例:
3[SP]1[SP]2[EOL]
4[SP]2[SP]3[EOF]
2[EOL]程序:
4[EOF]
#include<stdio.h>int main(){int T,n,m,k;scanf("%d",&T);while(T--){int i,s1=1,s2=1,s;scanf("%d%d%d",&n,&m,&k);if(m==0){printf("0");continue;}for(i=1;i<=k;i++)s1=(s1*(n-k+i))/i;if(n-m>=k) {for(i=1;i<=k;i++)s2=(s2*(n-m-k+i))/i;}else s2=0; s=s1-s2;printf("%d\n",s);} }
注意红色部分代码的组合数处理,特别一点是要判断n-m与k大小!7.最小距离问题
AA特别喜欢蹭饭,所以他没事就去同学家拜访。他有三个朋友,ff、pp和aa,他们三个每人住在自己的屋子里。AA不仅蹭饭,每次辗转于三人的房屋时,还测出ff家到pp家距离a米,ff家到aa家距离b米,pp家到aa家距离c米。
AA不仅喜欢蹭饭,还特别能吃,他每天要吃n顿饭。现在他正在ff家中,准备吃今天的第一顿饭。当然蹭饭也是要有原则的,不能连续在一个朋友家蹭饭。
AA不仅能吃,还特别懒。他要吃n顿饭,还想要走的总路程最小,请你帮他算算最少要走多少米的路程。
程序输入:
第一行为数字n(1<=n<=100)表示要吃的饭的数目。第二行为ff家到pp家的距离a(1<=a<=100)。
第三行为ff家到aa家的距离b(1<=b<=100)。
第四行为pp家到aa家的距离c(1<=c<=100)。
程序输出:一个整数,表示需要走的最小的总路程。
输入样例:
3[EOL]
2[EOL]
3[EOL]
1[EOF]
3
#include<stdio.h>int main(){int n,a,b,c,s,x;while(scanf("%d",&n)!=EOF){scanf("%d%d%d",&a,&b,&c);if(a<b&&a<c)s=a*(n-1);else if(b<a&&b<c)s=b*(n-1);else if(a==b&&b==c)s=a*(n-1);else if(a==b&&a<c)s=a*(n-1);else if(c<a&&c<b){x=(a<b?a:b);if(n==1)s=0;else if(n==2)s=b;else s=x+(n-2)*c;}printf("%d\n",s);}return 0;}不要想复杂,其实超简单的。。。
- ACM刷题
- ACM
- acm
- ACM
- acm
- ACM!!
- ACM!!
- acm
- ACM
- ACM
- acm
- acm
- ACM
- ACM
- ACM
- ACM
- ACM
- ACM
- 【计算机系统组成】系统总线 知识要点
- IO流总结(3)----字符流
- Hadoop Overview
- 微信公众号》》》连接公众平台
- shell的变量功能(二)
- ACM刷题
- The Suspects(POJ 1611)
- C++ 高效位运算函数 之 __builtin_
- 用Nginx+Lua(OpenResty)开发高性能Web应用
- 由主页界面引出的几个知识点(三)
- FPGA实验5:多周期移位寄存器
- oracle的schema的含义
- 如何快速转载CSDN中的博客[转载]
- mac环境kafka启动时报No such file or directory解决办法