先说一下Java对于ACM的一些优点吧:(1)对于熟悉C/C++的程序员来说Java并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了。Java的语法和C++非常类似,可以说是C++的升级版,只是更加强调面向对象思想而已。(个人见解。。。)(2)在一般比赛中,Java程序会有额外的时间和空间,但真正进行大规模运算时Java并不比C/C++慢,输入输出效率比较低而已(3)Java代码简单且功能强大,有些像高精度之类的算法用Java实现起来更为简洁方便(ACM真正比赛时是讲究做题速度的,任何题只要能过就行,而不必过于要求程序的速度有多高,不超时就好)。小技巧:某些题目用Java超时的话可以用Java打表然后用C/C++提交(4)用Java不易犯细微的错误,比如C/C++中的指针,“if(n=m)”等。(5)目前Eclipse已成基本配置,写Java程序反而比C/C++更方便调试。在具体竞赛时也算多一种选择。关于ACM中应用的一些问题:(1)JDK150及其以上版本提供的Scanner类为输入提供了良好的基础,很好地优化Java的输入问题。代码如下:importjavaioimportjavautilpublicclassMain{publicstaticvoidmain(Stringargs[]){Scannercin=newScanner(newBufferedInputStream(Systemin));}}也可以直接Scannercin=newScanner(Systemin);加Buffer可能会快一些。(2)读一个整数:intn=cinnextInt();相当于scanf("%d",&n);或cin>>n;读一个字符串:Strings=cinnext();相当于scanf("%s",s);或cin>>s;读一个浮点数:doublet=cinnextDouble();相当于scanf("%lf",&t);或cin>>t;读一整行:Strings=cinnextLine();相当于gets(s);或cingetline();判断是否有下一个输入可以用cinhasNext()或cinhasNextInt()或cinhasNextDouble()(3)输出一般可以直接用Systemoutprint()和Systemoutprintln(),前者不输出换行,而后者输出。Systemoutprintln(n);//n为int型同一行输出多个整数可以用Systemoutprintln(newInteger(n)toString()+""+newInteger(m)toString());//也可重新定义:staticPrintWritercout=newPrintWriter(newBufferedOutputStream(Systemout));coutprintln(n);(4)对于输出浮点数保留几位小数的问题,可以使用DecimalFormat类,importjavatext;DecimalFormatf=newDecimalFormat("#00#");DecimalFormatg=newDecimalFormat("0000");doublea=12345678,b=012;Systemoutprintln(fformat(a));Systemoutprintln(fformat(b));Systemoutprintln(gformat(b));大数:BigInteger和BigDecimal是在javamath包中已有的类,前者表示整数,后者表示浮点数importjavamath//需要引入javamath包BigIntegera=BigIntegervalueOf(100);BigIntegerb=BigIntegervalueOf(50);BigIntegerc=aadd(b)//c=a+b;//主要有以下方法可以使用:BigIntegeradd(BigIntegerother)BigIntegersubtract(BigIntegerother)BigIntegermultiply(BigIntegerother)BigIntegerdivide(BigIntegerother)BigIntegermod(BigIntegerother)intcompareTo(BigIntegerother)staticBigIntegervalueOf(longx)//输出数字时直接使用Systemoutprintln(a)即可字符串:String类用来存储字符串,可以用charAt方法来取出其中某一字节,计数从0开始:Stringa="Hello";//acharAt(1)='e'用substring方法可得到子串,如上例Systemoutprintln(asubstring(0,4))//output"Hell"注意第2个参数位置上的字符不包括进来。这样做使得ssubstring(a,b)总是有b-a个字符。字符串连接可以直接用+号,如Stringa="Hello";Stringb="world";Systemoutprintln(a+","+b+"!");//output"Hello,world!"如想直接将字符串中的某字节改变,可以使用另外的StringBuffer类。调用递归(或其他动态方法)在主类中main方法必须是publicstaticvoid的,在main中调用非static类时会有警告信息,可以先建立对象,然后通过对象调用方法:publicclassMain{voiddfs(inta){if()return;dfs(a+1);}publicstaticvoidmain(Stringargs[]){Maine=newMain();edfs(0);}}其他注意的事项:(1)Java是面向对象的语言,思考方法需要变换一下,里面的函数统称为方法,不要搞错。(2)Java里的数组有些变动,多维数组的内部其实都是指针,所以Java不支持fill多维数组。数组定义后必须初始化,如int[]a=newint[100];(3)布尔类型为boolean,只有true和false二值,在if()/while()等语句的条件中必须为boolean类型。在C/C++中的if(n%2)在Java中无法编译通过。(4)下面在javautil包里Arrays类的几个方法可替代C/C++里的memset、qsort/sort和bsearch:Arraysfill()Arrayssort()ArraysbinarySearch()虽然Java功能很强大,但不能完全依赖他,毕竟C和C++还是ACM/ICPC的主流语言,适当地使用才能有效提高比赛中的成绩。。。附:例题:POJ10011importjavaio;2importjavautil;3importjavamathBigDecimal;45publicclassMain{67publicstaticvoidmain(Stringargs[])8{9Scannercin=newScanner(Systemin);1011BigDecimalnum;12intn;13Stringr;1415while(cinhasNextBigDecimal())16{17num=cinnextBigDecimal();18n=cinnextInt();19num=numpow(n);20r=numstripTrailingZeros()toPlainString();21if(rstartsWith("0"))r=rsubstring(1);2223Systemoutprintln(r);24}25}26}
acm建议大一就接触。各大互联网公司招聘都是看能力,而不是看你在大学得的分有多高,或是保研保到了哪个名牌高校。而在ACM中拿奖则是能力的体现,可以在应聘时让考官对你刮目相看。而如果你没参加过ACM,大公司根本就不会要你。
对于并不能确保拿到奖牌的,或者说大学前没有接触没有编程基础的,大学计算机系毕业有三种模式:
1、继续深造,考研出国等。考试考好,争取保送、考研或奖学金出国;
2、喜欢做实际项目,经常实习或者兼职开发的,有那么一些实际经验和项目,出来找个工作没问题。另外这方面在北京的学生很有优势,实习都是一二线知名公司,实习经验很有含金量。
3、专心acm刷题的,就只能靠刷题能力硬拼了。准确来说acm奖牌不会让你的面试更容易,只是说你有这个底子,一般面试题是应该没有压力轻松过的。奖牌本身可能会让你的offer价码多一点。
然而呢,这又是个双刃剑,因为本科+acm奖牌,不一定就比研究生无比赛经验的筹码更高。
不是。
虽然ACM调理洗发水可以改善头皮环境,但它并不属于生发剂。生发剂通常包含些化学物质、草本提取物或药物成分,旨在促进头皮毛囊发育和头发生长。与此不同,ACM调理洗发水更注重调理和保护头皮,改善头皮环境,使得头发更加健康亮丽。
ACM调理洗发水是一款专业的头皮护理产品,主要针对头皮问题提供调理和修护作用。ACM调理洗发水中含有多种天然植物提取物和草本成分,可有效清洁头皮、舒缓头皮不适、增强头皮健康状况。
这题是考欧拉函数的应用
参考代码:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
unsigned euler(unsigned x)
{
unsigned i, res=x;
int sum = (int)sqrt(x 10) + 1;
for (i = 2; i < sum; i++)
if(x%i==0) {
res = res / i (i - 1);
while (x % i == 0) x /= i; // 保证i一定是素数
}
if (x > 1) res = res / x (x - 1);
return res;
}
int main()
{
int n;
while (scanf("%d",&n)&&n)
{
printf("%d\n",euler(n));
}
return 0;
}
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)