2023-10-31 15:26来源:m.sf1369.com作者:宇宇
final(总决赛)可以用的分别是JAVA , C ,C++。一般用C和C++的多一些,其实用C++的也很少有人用到类来解决问题,本质上还是用C,只是用C++的STL什么的方便一点。
优势?语言没什么太大的优势可言,只是JAVA在解决大数问题上有那么一点点优势,但基本可以忽略了,因为比赛中解决高精度问题不是很难。
如果你只输入一个字符串,可以把程序里的while循环改了,不过对于ACM程序的判定来说,输入一个也是可以用while来进行输入的,你可以先提交一下我的代码试试。
count函数用来判定字符串s是否是回文,如果是返回1,否则返回0.
#include #include #include int Count(char *s) { int i, j, t; t = strlen(s); i=0, j=t-1; while(i { if(s[i]!=s[j]) { return 0; } i++, j--; } return 1; } int main() { char s[280]; while(scanf(%s, s)==1) { if(Count(s)==1) { putchar('Y'); } else { putchar('N'); } putchar('\n'); } return 0; }
是用C的,C++,JAVA这些的。
方式一,手动输入两个数a、b,算出a+b:
#include <stdio.h>
void main()
{
int a,b;
scanf(%d %d,&a, &b);
printf(%d\n,a+b);
}
方式二,定义两个数a、b,算出a+b:
#include <stdio.h>
void main()
{
int a =3, b = 4;
printf(%d\n,a+b);
}
额。。你还没有学过C就要参加ACM啦?没事,慢慢来~
俺大学期间参加过acm,只拿过一个铜牌。就谈谈我的经验吧~
学编程语言,无非看书+实践。
学习c语言,国内入门的就是谭浩强的书绿皮书啦~好好学学。如果对国内的书无好感,可以看看c primer plus。如果要学的更全面,就一定要看Brian W.Kernighan和Dennis M.Ritchie写的C程序设计语言。
以上是语言部分。但是要玩ACM,这还远远不够。
大学期间计算机专业都会学数据结构和算法设计两门课程,这些课程至关重要。所以,如果你要精进自己的算法能力,这两门必须学好。同样推荐几本书,国内的严蔚敏的数据结构和王晓东的计算机算法设计与分析。国外的Mark Allen Weiss的数据结构与算法分析:C语言描述和著名的MIT的算法导论。注意,老外的书更全面复杂,无论是初学阶段,还是后来的能力提升,都会有帮助!入门的话还是国内的啦~
以上内容学好只是表明你的理论基础过关。更重要的就是编码能力了。ACM是理论和实践的结合。在实际编程中会有很多小技巧和规律,这个就要靠你自己摸索了。当然,针对具体的acm比赛方面的书,无论是ACM规则,编码调试技巧还是算法理论,国内也有不少好的,比如刘汝佳的书就非常值得一看。推荐刘汝佳的黑书《算法艺术与信息学竞赛 》(后期看)和他的《算法艺术与信息学竞赛•算法竞赛入门经典》(前期可看)
此外,一定要多多练习,各大OJ,包括ZOJ,POJ等等,都是练习的去处。一定要勤刷题啊~不懂就问,上网多搜索,几乎所有的题目都会有人给出解答的~
最后,参加ACM是件很苦的事情。除了训练,到后期,你得学会合作,毕竟ACM是三人组队参加。要找到自己擅长的领域,一个人很少可能是ACM全能王,你是擅长搜索,还是动态规划,自己要非常清楚。另外,数学理论也要加强!具体数学,离散数学,组合数学,根据你在队伍中角色和职能的定位有目的的精进自己的数学理论~
以上说的顺序不并不是固定的。比如学完c语言后就可在OJ上刷刷水题了~之后可以一边学算法,一边学数据结构,一边上OJ做题啦~
说了这么多,最后说一句,欢迎加入ACM!
#include int caculate(int i, int j, int n) { int xoffset; int yoffset; int result; xoffset = ((n-i)>0)?n-i:i-n; yoffset = ((n-j)>0)?n-j:j-n; result = (xoffset > yoffset)?n-xoffset:n-yoffset; return result; } int main() { int n = '\0'; int i,j,l; //input and check printf(Pls input a integer in the range (0 10)\n); scanf(%d,&n); while(n <= 0 || n >=10) { printf(Invalid number! Pls input a integer in the range (0 10)\n); scanf(%d,&n); } printf(The input number is %d\n, n); l = 2*n -1; //output for(i = 1; i <= l; i++){ for(j = 1; j <= l; j++) printf(%d,caculate(i,j,n)); printf(\n); } return 0; }