【问题描述】美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你推算一下,他当时到底有多年轻。通过浏览器,直接提交他那时的年龄数字。注意:不要提交解答过程,或其它的说明文字。【答案】18【暴力法代码】
publicstaticvoidmain(String[]args){ for(intage=11;age<20;age++){ System.out.println("年龄"+age+":"+Math.pow(age,3)+""+Math.pow(age,4)); } }【输出】年龄11:1331.014641.0年龄12:1728.020736.0年龄13:2197.028561.0年龄14:2744.038416.0年龄15:3375.050625.0年龄16:4096.065536.0年龄17:4913.083521.0年龄18:5832.0104976.0年龄19:6859.0130321.0【Set集合代码】
publicstaticvoidmain(String[]args){ for(inti=10;i<100;i++){ inti1=i*i*i; inti2=i1*i; Strings1=i1+""; Strings2=i2+""; if(s1.length()==4&&s2.length()==6&&Check(s1+s2)){ System.out.println(i); break; } } } publicstaticbooleanCheck(Strings){ Set publicstaticbooleanisPrime(intnum){//判断是否为素数 if(num==1||num%2==0&&num!=2){ returnfalse; }else{ for(inti=3;i 请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。 答案直接通过浏览器提交。注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。【答案】142【暴力破解法】for循环套的有点迷 publicstaticvoidmain(String[]args){ intcount=0; for(inta=1;a<=9;a++){ for(intb=1;b<=9;b++){ if(b==a) continue; for(intc=1;c<=9;c++){ if(c==a||c==b) continue; for(intd=1;d<=9;d++){ if(d==a||d==b||d==c){ continue; } for(inte=1;e<=9;e++){ if(e==a||e==b||e==c||e==d){ continue; } if((10*a+b)*(100*c+10*d+e)==(100*a+10*d+b)*(10*c+e)){ count++; } } } } } } System.out.println(count);//142 }【递归全排列法】解法和上一题差不多 publicstaticSet 要求提交的是一个整数。注意:不要提交解答过程,或其它的辅助说明文字。【答案】51167078【代码】 publicstaticvoidmain(String[]args){ System.out.println(f(0));//51167078 } publicstaticintf(intx){ if(x==39){// return1; } if(x>39)//抛弃 return0; returnf(x+2)+2*f(x+3)+f(x+4);//1步 } //(左脚右脚)(左脚右脚)........(左脚右脚)->39 //一个组合可能有四种走法2步3步3步4步 //抛弃大于39 //得到正好走到39有理数类【问题描述】有理数就是可以表示为两个整数的比值的数字。一般情况下,我们用近似的小数表示。但有些时候,不允许出现误差,必须用两个整数来表示一个有理数。这时,我们可以建立一个“有理数类”,下面的代码初步实现了这个目标。为了简明,它只提供了加法和乘法运算。 classRational{ privatelongra; privatelongrb; privatelonggcd(longa,longb){ if(b==0)returna; returngcd(b,a%b); } publicRational(longa,longb){ ra=a; rb=b; longk=gcd(ra,rb); if(k>1){//需要约分 ra/=k; rb/=k; } } //加法 publicRationaladd(Rationalx){ return________________________________________;//填空位置 } //乘法 publicRationalmul(Rationalx){ returnnewRational(ra*x.ra,rb*x.rb); } publicStringtoString(){ if(rb==1)return""+ra; returnra+"/"+rb; }}使用该类的示例:Rationala=newRational(1,3);Rationalb=newRational(1,6);Rationalc=a.add(b);System.out.println(a+"+"+b+"="+c);请分析代码逻辑,并推测划线处的代码,通过网页提交注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!!【答案】newRational(rax.rb+x.rarb,rb*x.rb)参照乘法 【问题描述】正常的表达式称为中缀表达式,运算符在中间,主要是给人阅读的,机器求解并不方便。例如:3+5*(2+6)-1而且,常常需要用括号来改变运算次序。相反,如果使用逆波兰表达式(前缀表达式)表示,上面的算式则表示为:-+3*5+261不再需要括号,机器可以用递归的方法很方便地求解。为了简便,我们假设:1.只有+-*三种运算符2.每个运算数都是一个小于10的非负整数下面的程序对一个逆波兰表示串进行求值。其返回值为一个数组:其中第一元素表示求值结果,第二个元素表示它已解析的字符数。 staticint[]evaluate(Stringx) { if(x.length()==0)returnnewint[]{0,0}; charc=x.charAt(0); if(c>='0'&&c<='9')returnnewint[]{c-'0',1}; int[]v1=evaluate(x.substring(1)); int[]v2=__________________________________________;//填空位置 intv=Integer.MAX_VALUE; if(c=='+')v=v1[0]+v2[0]; if(c=='*')v=v1[0]*v2[0]; if(c=='-')v=v1[0]-v2[0]; returnnewint[]{v,1+v1[1]+v2[1]}; }请分析代码逻辑,并推测划线处的代码,通过网页提交。注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!!【答案】evaluate(x.substring(v1[1]+1)) 【问题描述】小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:1.各组的核桃数量必须相同2.各组内必须能平分核桃(当然是不能打碎的)3.尽量提供满足1,2条件的最小数量(节约闹革命嘛)程序从标准输入读入:abca,b,c都是正整数,表示每个组正在加班的人数,用空格分开(a,b,c<30) 程序输出:一个正整数,表示每袋核桃的数量。 例如:用户输入:245 程序输出:20 再例如:用户输入:311 程序输出:3 资源约定:峰值内存消耗(含虚拟机)<64MCPU消耗<1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。注意:主类的名字必须是:Main,否则按无效代码处理。【代码】 publicstaticvoidmain(String[]args){ Scannerscan=newScanner(System.in); inta=scan.nextInt(); intb=scan.nextInt(); intc=scan.nextInt(); for(inti=1;i<=a*b*c;i++){ if(i%a==0&&i%b==0&&i%c==0){ System.out.println(i); break; } } }打印十字图递归重拟矩阵坐标系【问题描述】小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg) $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。输入格式:一个正整数n(n<30)表示要求打印图形的层数 输出:对应包围层数的该标志。 例如:用户输入:1程序应该输出:..$$$$$....$...$..$$$.$.$$$$...$...$$.$$$$$.$$...$...$$$$.$.$$$..$...$....$$$$$.. 再例如:用户输入:3程序应该输出:..$$$$$$$$$$$$$....$...........$..$$$.$$$$$$$$$.$$$$...$.......$...$$.$$$.$$$$$.$$$.$$.$...$...$...$.$$.$.$$$.$.$$$.$.$$.$.$...$...$.$.$$.$.$.$$$$$.$.$.$$.$.$...$...$.$.$$.$.$$$.$.$$$.$.$$.$...$...$...$.$$.$$$.$$$$$.$$$.$$...$.......$...$$$$.$$$$$$$$$.$$$..$...........$....$$$$$$$$$$$$$.. 请仔细观察样例,尤其要注意句点的数量和输出位置。 输入:两个正整数,表示每种包装中糖的颗数(都不多于1000) 要求输出:一个正整数,表示最大不能买到的糖数 例如:用户输入:47程序应该输出:17 再例如:用户输入:35程序应该输出:7 资源约定:峰值内存消耗(含虚拟机)<64MCPU消耗<3000ms publicstaticvoidmain(String[]args){ Scannerscan=newScanner(System.in); inta=scan.nextInt(); intb=scan.nextInt(); for(inti=a*b;i>=(a>ba:b);i--){ if(fun(a,b,i)){ System.out.println(i); break; } } } publicstaticbooleanfun(inta,intb,inta_and_b){ for(inti=0;i<=b;i++){ for(intj=0;j<=a;j++){ if(a*i+b*j==a_and_b){ returnfalse; } } } returntrue; }剪格子dfs剪枝回溯【问题描述】如图p1.jpg所示,3x3的格子中填写了一些整数。我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60。本题的要求就是请你编程判定:对给定的mxn的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。如果无法分割,则输出0程序输入输出格式要求:程序先读入两个整数mn用空格分割(m,n<10)表示表格的宽度和高度接下来是n行,每行m个正整数,用空格分开。每个整数不大于10000程序输出:在所有解中,包含左上角的分割区可能包含的最小的格子数目。 例如:用户输入:331015220301123 再例如:用户输入:431111130802111100 则程序输出:10 资源约定:峰值内存消耗(含虚拟机)<64MCPU消耗<5000ms publicstaticvoidmain(String[]args){ for(inti=1;i<=100;i++){ for(intj=i+1;j<=100;j++){ if(i*j==6*(i+j)&&(j-i)<=8){ System.out.println(i); } } } //10岁 }等额本金暴力破解【问题描述】小明从银行贷款3万元。约定分24个月,以等额本金方式还款。这种还款方式就是把贷款额度等分到24个月。每个月除了要还固定的本金外,还要还贷款余额在一个月中产生的利息。假设月利率是:0.005,即:千分之五。那么,第一个月,小明要还本金1250,还要还利息:30000*0.005,总计1400第二个月,本金仍然要还1250,但利息为:(30000-1250)*0.005总计1393.75请问:小明在第15个月,应该还款多少(本金和利息的总和)?请把答案金额四舍五入后,保留两位小数。注意:32.5,一定要写为:32.50通过浏览器提交答案,这是一个含有小数点和两位小数的浮点数字。不要写多余内容(例如:多写了“元”或添加说明文字)【答案】1312.50【代码】 System.out.println(1250+((30000-1250*14)*0.005));猜字母局部思维or暴力破解【问题描述】把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。【答案】q【代码】 publicstaticvoidmain(String[]args){ //方法1全局——>局部 //106个串缩小为2个串 //"abcdefghijklmnopqrsabcdefghijklmnopqrs"; //去奇数最后剩q //方法2 char[]a=newchar[2014]; intindex=0; for(inti=0;i<106;i++){ for(intj=0;j<19;j++){ a[index++]=(char)('a'+j); } } intlen=2014; while(len!=1){ intk=0; for(inti=1;i 【问题描述】写日志是程序的常见任务。现在要求在t1.log,t2.log,t3.log三个文件间轮流写入日志。也就是说第一次写入t1.log,第二次写入t2.log,...第四次仍然写入t1.log,如此反复。下面的代码模拟了这种轮流写入不同日志文件的逻辑。publicclassA{privatestaticintn=1; publicstaticvoidwrite(Stringmsg){ Stringfilename="t"+n+".log"; n=____________; System.out.println("writetofile:"+filename+""+msg);}}请填写划线部分缺失的代码。通过浏览器提交答案。注意:不要填写题面已有的内容,也不要填写任何说明、解释文字。【答案】n%3+1 【问题描述】话说大诗人李白,一生好饮。幸好他从不开车。一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:无事街上走,提壶去打酒。逢店加一倍,遇花喝一斗。这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。【代码】 publicstaticintans=0; publicstaticvoidmain(String[]args){ fun(0,0,2); System.out.println(ans); } publicstaticvoidfun(inta,intb,intwine){ if(wine==1&&a==5&&b==9){ ans++; return; } if(a>5||b>9){ return; } fun(a+1,b,wine*2);//遇见店 fun(a,b+1,wine-1);//遇见花 }奇怪的分式递归(最大公约数)【问题描述】上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:1/4乘以8/5小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45(参见图1.png)老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!对于分子、分母都是1~9中的一位数的情况,还有哪些算式可以这样计算呢?请写出所有不同算式的个数(包括题中举例的)。显然,交换分子分母后,例如:4/1乘以5/8是满足要求的,这算做不同的算式。但对于分子分母相同的情况,2/2乘以3/3这样的类型太多了,不在计数之列!注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。【代码】 再例如,输入:3300011111111U6程序应该输出:00 资源约定:峰值内存消耗(含虚拟机)<256MCPU消耗<1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。注意:主类的名字必须是:Main,否则按无效代码处理。【代码】 再例如,输入:232123215程序应该输出:14资源约定:峰值内存消耗(含虚拟机)<256MCPU消耗<2000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。注意:主类的名字必须是:Main,否则按无效代码处理。【代码】 publicclassA{ publicstaticvoidmain(String[]args) { intN=8; int[][]a=newint[N][N]; for(inti=0;i 【问题描述】1/1+1/2+1/3+1/4+...在数学上称为调和级数。它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字。但是,它发散的很慢:前1项和达到1.0前4项和才超过2.0前83项的和才超过5.0那么,请你计算一下,要加多少项,才能使得和达到或超过15.0呢?请填写这个整数。注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。【答案】1835421【代码】 publicstaticvoidmain(String[]args){ doublesum=0; intans=0; for(inti=1;;i++){ sum=sum+(double)1/i; ans++; if(sum>=15){ break; } } System.out.println(ans); }回文素数【问题描述】10301是个5位的素数。它有个特点,把数字倒过来还是它本身,具有这样特征的素数,我们称之为:回文素数。105011060111311这些都是5位的回文素数。请你计算一下,像这样的5位数的回文素数,一共有多少个?请填写这个表示个数的整数,注意不要写任何其它多余的内容,比如说明或解释文字,也不要列出所有的回文素数。【答案】93【代码】 publicstaticvoidmain(String[]args){ intans=0; for(inti=10001;i<=100000;i++){ if(perm(i)){ StringBuffersb=newStringBuffer(String.valueOf(i)); if(sb.toString().equals(sb.reverse().toString())){ ans++; } } } System.out.println(ans); } publicstaticbooleanperm(intnum){ if(num==1||num%2==0&&num!=2){ returnfalse; }else{ for(inti=3;i<=Math.sqrt(num);i+=2){ if(num%i==0){ returnfalse; } } } returntrue; }让我怎能过大年【问题描述】有如下的加法算式。其中每个汉字代表一个数字。(如存在对齐问题,可参见【图1.png】)年大年过大年能过大年怎能过大年我怎能过大年 能能能能能能能请填写“让我怎能过大年”所代表的整数。所有数字连在一起,中间不要空格。例如:"3125697"。当然,这个不是正确的答案。注意:只填写一个整数,不要填写任何多余的内容。【答案】1572836or2072836【代码】 publicstaticvoidmain(String[]args){ Scannerscan=newScanner(System.in); intx=scan.nextInt(); intn=scan.nextInt(); intsum=0; while(n>0){ sum=0; Stringtemp=String.valueOf(x); for(inti=0;i 可以把1分解为若干个互不相同的单位分数之和。例如:1=1/2+1/3+1/9+1/181=1/2+1/3+1/10+1/151=1/3+1/5+1/7+1/9+1/11+1/15+1/35+1/45+1/231等等,类似这样的分解无穷无尽。 我们增加一个约束条件:最大的分母必须不超过30 请你求出分解为n项时的所有不同分解法。 数据格式要求: 输入一个整数n,表示要分解为n项(n<12)输出分解后的单位分数项,中间用一个空格分开。每种分解法占用一行,行间的顺序按照分母从小到大排序。 【输入】4【输出】1/21/31/81/241/21/31/91/181/21/31/101/151/21/41/51/201/21/41/61/12【输入】5【输出】1/21/31/121/211/281/21/41/61/211/281/21/41/71/141/281/21/41/81/121/241/21/41/91/121/181/21/41/101/121/151/21/51/61/121/201/31/41/51/61/20【资源约定】峰值内存消耗(含虚拟机)<256MCPU消耗<2000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。【代码】 staticintn; staticintgod; staticintans; staticintsum; publicstaticvoidmain(String[]args){ Scannerscan=newScanner(System.in); n=scan.nextInt(); god=scan.nextInt(); for(inti=0;i<=n;i++){ ans=0; fun(i,0); sum=sum+ans*ans; } System.out.println(sum%god); } publicstaticvoidfun(inti,intnow){//i目标楼梯k现在楼梯 if(now==i){ ans++; return; } if(now>i){ return; } fun(i,now+1);//上一阶楼梯 fun(i,now+2);//上两阶楼梯 }2015年JavaC组————蓝桥杯第六届隔行变色Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,....现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。请你直接提交这个整数,千万不要填写任何多余的内容。【答案】15【代码】 publicstaticvoidmain(String[]args){ intans=0; for(inti=21;i<=50;i++){ if(i%2!=0){ ans++; } } System.out.println(ans); }立方尾不变有些数字的立方的末尾正好是该数字本身。比如:1,4,5,6,9,24,25,....请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。请提交该整数,不要填写任何多余的内容。【答案】36【代码】 publicstaticvoidmain(String[]args){ BigDecimalfn=newBigDecimal(BigInteger.ONE); for(inti=2000;i>=1;i--){ BigDecimalii=newBigDecimal(BigInteger.valueOf(i)); fn=ii.divide(fn.add(ii),6,BigDecimal.ROUND_HALF_UP); } System.out.println(fn.toPlainString()); }循环节长度Debug找规律两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。比如,11/13=6=>0.846153846153.....其循环节为[846153]共有6位。下面的方法,可以求出循环节的长度。请仔细阅读代码,并填写划线部分缺少的代码。publicstaticintf(intn,intm){n=n%m;Vectorv=newVector(); for(;;) { v.add(n); n*=10; n=n%m; if(n==0)return0; if(v.indexOf(n)>=0)_________________________________;//填空 }}注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。【答案】returnv.size() 【问题描述】奇妙的数字小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗?请填写该数字,不要填写任何多余的内容。【答案】69【代码】 publicstaticvoidmain(String[]args){ Stringstr="0123456789"; for(inti=1;;i++){ chartemp[]=(String.valueOf((int)(Math.pow(i,2)))+String.valueOf((int)(Math.pow(i,3)))) .toCharArray(); if(temp.length==10){ Arrays.sort(temp); Stringresult=newString(temp); if(result.equals(str)){ System.out.println(i); break; } } } }加法变乘法【问题描述】我们都知道:1+2+3+...+49=1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015比如:1+2+3+...+1011+12+...+2728+29+...+49=2015就是符合要求的答案。请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。注意:需要你提交的是一个整数,不要填写任何多余的内容。【答案】16【代码】 publicstaticvoidmain(String[]args){ for(inti=1;i<=46;i++){ for(intj=i+2;j<=48;j++){ if(i*(i+1)-(i+i+1)+j*(j+1)-(j+j+1)==2015-1225){ System.out.println(i+""+j); } } } }移动的距离【问题描述】X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为6时,开始情形如下:123456121110987131415.....我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)输入为3个整数wmn,空格分开,都在1到10000范围内要求输出一个整数,表示mn两楼间最短移动距离。例如:用户输入:682则,程序应该输出:4再例如:用户输入:4720则,程序应该输出:5资源约定:峰值内存消耗(含虚拟机)<256MCPU消耗<1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。注意:主类的名字必须是:Main,否则按无效代码处理。【代码】 publicstaticvoidmain(String[]args){ Stringstring="vxvxvxvxvxvxvvx"; intmaney=777; for(inti=0;i publicstaticvoidmain(String[]args){ intdown=0; intsum=0; for(inti=1;i<=100;i++){ down=(int)Math.pow(i,2)-down; sum=sum+down; } System.out.println(sum); }平方怪圈【问题描述】如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。对新产生的正整数再做同样的处理。如此一来,你会发现,不管开始取的是什么数字,最终如果不是落入1,就是落入同一个循环圈。请写出这个循环圈中最大的那个数字。请填写该最大数字。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。【答案】145【代码】 publicstaticvoidmain(String[]args){ Stringinit; intm=66; for(inti=1;i<=100;i++){ init=String.valueOf(m); m=0; System.out.println(init); for(intj=0;j publicstaticvoidmain(String[]args){ intn=0; for(inti=0;i<6;i++) for(intj=0;j<6;j++) for(intk=0;k<6;k++){ if(________________________________)n++;//填空位置 } intm=gcd(n,6*6*6); System.out.println(n/m+"/"+6*6*6/m);}}仔细阅读代码,填写划线部分缺少的内容。注意:不要填写任何已有内容或说明性文字。【答案】i+j+2k+1||i+k+2j+1||j+k+2==i+1 【问题描述】9名运动员参加比赛,需要分3组进行预赛。有哪些分组的方案呢?我们标记运动员为A,B,C,...I下面的程序列出了所有的分组方法。该程序的正常输出为:ABCDEFGHIABCDEGFHIABCDEHFGIABCDEIFGHABCDFGEHIABCDFHEGIABCDFIEGHABCDGHEFIABCDGIEFHABCDHIEFGABCEFGDHIABCEFHDGIABCEFIDGHABCEGHDFIABCEGIDFHABCEHIDFGABCFGHDEIABCFGIDEHABCFHIDEGABCGHIDEFABDCEFGHIABDCEGFHIABDCEHFGIABDCEIFGHABDCFGEHIABDCFHEGIABDCFIEGHABDCGHEFIABDCGIEFHABDCHIEFGABDEFGCHI.....(以下省略,总共560行)。publicclassA{publicstaticStringremain(int[]a){Strings="";for(inti=0;i publicstaticvoidf(Strings,int[]a){ for(inti=0;i 【问题描述】BDEFA+---+-------=10CGHI(如果显示有问题,可以参见【图1.jpg】)这个算式中AI代表19的数字,不同的字母代表不同的数字。比如:6+8/3+952/714就是一种解法,5+3/1+972/486是另一种解法。这个算式一共有多少种解法?注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。【答案】29【代码】 staticintans=0; publicstaticvoidmain(String[]args){ inta[]={1,2,3,4,5,6,7,8,9}; fun(a,0,a.length-1); System.out.println(ans); } publicstaticvoidfun(inta[],intstart,intend){ if(start==end){ doubleA=a[0]; doubleB=a[1]; doubleC=a[2]; doubleDEF=a[3]*100+a[4]*10+a[5]; doubleGHI=a[6]*100+a[7]*10+a[8]; if((A*GHI*C+B*GHI+DEF*C)/(GHI*C)==10){ ans++; } }else{ for(inti=start;i<=end;i++){ swap(a,start,i); fun(a,start+1,end); swap(a,start,i); } } } publicstaticvoidswap(inta[],intn,intm){ inttemp=a[n]; a[n]=a[m]; a[m]=temp; }搭积木递归全排列【问题描述】小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9。搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。最后搭成4层的金字塔形,必须用完所有的积木。下面是两种合格的搭法:01234567890317529864请你计算这样的搭法一共有多少种?请填表示总数目的数字。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。【答案】768【代码】 publicstaticvoidmain(String[]args){ Stringstring="ABCDEFGHI"; BigIntegerb1=newBigInteger("651764141421415346185"); BigIntegerb2=newBigInteger("9"); System.out.println(string.charAt(b1.mod(b2).intValue()-1)); }兴趣小组【问题描述】为丰富同学们的业余文化生活,某高校学生会创办了3个兴趣小组(以下称A组,B组,C组)。每个小组的学生名单分别在【A.txt】,【B.txt】和【C.txt】中。每个文件中存储的是学生的学号。由于工作需要,我们现在想知道:既参加了A组,又参加了B组,但是没有参加C组的同学一共有多少人?请你统计该数字并通过浏览器提交答案。注意:答案是一个整数,不要提交任何多余的内容。笨笨有话说:哇塞!数字好多啊!一眼望过去就能发现相同的,好像没什么指望。不过,可以排序啊,要是每个文件都是有序的,那就好多了。歪歪有话说:排什么序啊,这么几行数字对计算机不是太轻松了吗?我看着需求怎么和中学学过的集合很像啊.....【答案】20【代码】 staticintans=0; publicstaticvoidmain(String[]args){ inta[]={1,2,3,4,5,6,7,8,9}; fun(a,0,a.length-1); System.out.println(ans/6); } publicstaticvoidfun(inta[],intstart,intend){ if(start==end){ intl1=a[0]+a[1]+a[2]+a[3]; intl2=a[3]+a[4]+a[5]+a[6]; intl3=a[6]+a[7]+a[8]+a[0]; if(l1==l2&&l2==l3){ ans++; } }else{ for(inti=start;i<=end;i++){ swap(a,start,i); fun(a,start+1,end); swap(a,start,i); } } } publicstaticvoidswap(inta[],intm,intn){ inttemp=a[m]; a[m]=a[n]; a[n]=temp; }承压计算【问题描述】X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。每块金属原料的外形、尺寸完全一致,但重量不同。金属材料被严格地堆放成金字塔形。 returna[col];}publicstaticvoidmain(String[]args){ System.out.println(f(6,2)); System.out.println(f(6,3)); }}请仔细分析源码,并完成划线部分缺少的代码。注意:只提交缺少的代码,不要提交已有的代码和符号。也不要提交说明性文字。【答案】intq=p-1;q>=1;q-- 【问题描述】最大公共子串就是求两个串的所有子串中能够匹配上的最大长度是多少。比如:"abcdkkk"和"baabcdadabc",可以找到的最长的公共子串是"abcd",所以最大公共子串长度为4。下面的程序是采用矩阵法进行求解的,这对串的规模不大的情况还是比较有效的解法。请分析该解法的思路,并补全划线部分缺失的代码。publicclassA{staticintf(Strings1,Strings2){char[]c1=s1.toCharArray();char[]c2=s2.toCharArray(); int[][]a=newint[c1.length+1][c2.length+1]; intmax=0; for(inti=1;i 【问题描述】Excel单元格的地址表示很有趣,它使用字母来表示列号。比如,A表示第1列,B表示第2列,Z表示第26列,AA表示第27列,AB表示第28列,BA表示第53列,....当然Excel的最大列号是有限度的,所以转换起来不难。如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?本题目既是要求对输入的数字,输出其对应的Excel地址表示方式。例如,输入:26则程序应该输出:Z再例如,输入:2054则程序应该输出:BZZ我们约定,输入的整数范围[1,2147483647]资源约定:峰值内存消耗(含虚拟机)<256MCPU消耗<1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。不要使用package语句。不要使用jdk1.7及以上版本的特性。主类的名字必须是:Main,否则按无效代码处理。笨笨有话说:这有点像进制关系,又不完全是。好像末2位是以1当26,末3位是以1当26*26歪歪有话说:要是从字母序列转数字还好点,倒过来有点麻烦,不过计算机跑得快啊。【代码】 11111133311122333111223332.如果当前行剩余宽度大于0,并且小于下一张图片,则下一张图片会按比例缩放到宽度为当前行剩余宽度(高度向上取整),然后放入当前行。例如再放入一张4x9的图片,由于剩余宽度是2,这张图片会被压缩到2x5,再被放入第一行的末尾。此时该行高度为5:0123456789 441114411133344111223334411122333443.如果当前行剩余宽度为0,该工具会从下一行开始继续对剩余的图片进行排版,直到所有图片都处理完毕。此时所有行的总高度和就是这N张图片的排版高度。例如再放入11x1,5x5,3x4的图片后,效果如下图所示,总高度为11:0123456789 4411144111333441112233344111223334455555555556666666666777666667776666677766666777现在由于排版高度过高,图片的先后顺序也不能改变,小明只好从N张图片中选择一张删除掉以降低总高度。他希望剩余N-1张图片按原顺序的排版高度最低,你能求出最低高度是多少么?输入:第一行包含两个整数M和N,分别表示纸张宽度和图片的数量。接下来N行,每行2个整数Wi,Hi,表示第i个图大小为Wi*Hi。对于30%的数据,满足1<=N<=1000对于100%的数据,满足1<=N<=100000,1<=M,Wi,Hi<=100输出:一个整数,表示在删除掉某一张图片之后,排版高度最少能是多少。样例输入:43222322样例输出:2另一个示例,样例输入:21044431345212354531524样例输出:17资源约定:峰值内存消耗(含虚拟机)<256MCPU消耗<2000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。不要使用package语句。不要使用jdk1.7及以上版本的特性。主类的名字必须是:Main,否则按无效代码处理。【代码】 intday=0; intmaney=0; for(inti=1;;i=i+2){ maney=maney+i; day++; if(maney>=108){ System.out.println(day); break; } }猴子分香蕉【问题描述】5只猴子是好朋友,在海边的椰子树上睡着了。这期间,有商船把一大堆香蕉忘记在沙滩上离去。第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份藏起来继续睡觉。第2只猴子醒来,重新把香蕉均分成5堆,还剩下2个,就吃掉并把自己的一份藏起来继续睡觉。第3只猴子醒来,重新把香蕉均分成5堆,还剩下3个,就吃掉并把自己的一份藏起来继续睡觉。第4只猴子醒来,重新把香蕉均分成5堆,还剩下4个,就吃掉并把自己的一份藏起来继续睡觉。第5只猴子醒来,重新把香蕉均分成5堆,哈哈,正好不剩!请计算一开始最少有多少个香蕉。需要提交的是一个整数,不要填写任何多余的内容。【答案】3141【代码】 publicstaticvoidmain(String[]args){ longMAX=59084709587505l; intsum=0; for(longi=0;Math.pow(3,i) returns.charAt(s.length()-1)-'0'==(10-sum%10)%10;}publicstaticvoidmain(String[]args){ System.out.println(f("978-7-301-04815-3")); System.out.println(f("978-7-115-38821-6"));}}注意:只提交空缺的代码,不要抄写已经存在的代码。【答案】k%2!=0(c-'0'):(c-'0')*3 【问题描述】如下的程序目的是在控制台打印输出大X。可以控制两个参数:图形的高度,以及笔宽。用程序中的测试数据输出效果:(如果显示有问题,可以参看p1.png)高度=15,笔宽=3 *************************************高度=8,笔宽=5 请仔细分析程序流程,填写缺失的代码。publicclassA{staticvoidf(inth,intw){System.out.println(String.format("高度=%d,笔宽=%d",h,w));inta1=0;inta2=h-1;for(intk=0;k for(inti=0;i 在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。比如:248*15=3720把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得2+4+8=14==>1+4=5;1+5=65*6而结果逐位求和为35*6的结果逐位求和与3符合,说明正确的可能性很大!!(不能排除错误)请你写一个计算机程序,对给定的字符串逐位求和:输入为一个由数字组成的串,表示n位数(n<1000);输出为一位数,表示反复逐位求和的结果。例如:输入:35379程序应该输出:9再例如:输入:7583676109608471656473500295825程序应该输出:1资源约定:峰值内存消耗(含虚拟机)<256MCPU消耗<1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。不要使用package语句。不要使用jdk1.7及以上版本的特性。主类的名字必须是:Main,否则按无效代码处理。【代码】 publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); Stringstr=sc.nextLine(); fun(str,0); } publicstaticvoidfun(Stringstr,intsum){ for(inti=0;i publicstaticvoidmain(String[]args){ Scannerscanner=newScanner(System.in); intn=scanner.nextInt();//输入摔手机的层数 int[]arr=newint[1000]; intans=1;//暂时保存摔的次数 for(inti=0;ans publicstaticvoidmain(String[]args){ Stringstr="2019"; intans=0; intsum=0; for(inti=1;i<=2019;i++){ StringstrI=String.valueOf(i); for(intj=0;j publicstaticvoidmain(String[]args){ intl=2019; intw=324; intans=0; while(true){ if(l==0||w==0){ break; } if(l>=w){ l=l-w; ans++; }elseif(l publicstaticvoidmain(String[]args){ Stringstr="0100110001010001"; Set staticintans=0; publicstaticvoidmain(String[]args){ for(inti=2;;i++){ fun(i); if(ans==2019){ System.out.println(i); break; } } } publicstaticbooleanfun(intk){ if(k==1||k%2==0&&k!=2){ returnfalse; }else{ for(inti=3;i<=Math.sqrt(k);i++){ if(k%i==0){ returnfalse; } } } ans++; returntrue; }最大降雨量【问题描述】由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。这个法术需要用到他手中的49张法术符,上面分别写着1至49这49个数字。法术一共持续7周,每天小明都要使用一张法术符,法术符不能重复使用。每周,小明施展法术产生的能量为这周7张法术符上数字的中位数。法术施展完7周后,求雨将获得成功,降雨量为7周能量的中位数。由于干旱太久,小明希望这次求雨的降雨量尽可能大,请大最大值是多少【答案】3427282930313233202122232425261314151617181910111234353637789383940414564243444512346474849 【问题描述】图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时针旋转90度。我们用一个nxm的二维数组来表示一个图片,例如下面给出一个3×4的图片的例子:135798763597这个图片顺时针旋转90度后的图片如下:391583975767给定初始图片,请计算旋转后的图片。【输入格式】输入的第一行包含两个整数n和m,分别表示行数和列数。接下来n行,每行m个整数,表示给定的图片。图片中的每个元素(像素)为一个值为0至255之间的整数(包含0和255)。【输出格式】输出m行n列,表示旋转后的图片。试题F:旋转7【代码】 【代码】 publicstaticvoidmain(String[]args){ System.out.println(15.125*1024); }【输出】15488 【问题描述】1200000有多少个约数(只计算正约数)。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。【答案】96【分析】什么使约数约数,又称因数。整数a除以整数b(b≠0)除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。4的正约数有:1、2、4。6的正约数有:1、2、3、6。10的正约数有:1、2、5、10。12的正约数有:1、2、3、4、6、12。15的正约数有:1、3、5、15。【代码】 publicstaticvoidmain(String[]args){ System.out.println(fun(1200000)); } //返回约束的个数 publicstaticintfun(intnum){ intcount=0; for(inti=1;i<=num;i++){ if(num%i==0){ count++; } } returncount; }【输出】96 【问题描述】一棵包含有2019个结点的二叉树,最多包含多少个叶结点?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。【答案】1010【分析】二叉树什么时候出现最多的叶结点的情况?在完全二叉树的情况下可以得到最多的叶子节点。叶子节点最多的个数与节点总数的奇偶有关,奇数个则有(n-1)/2+1个偶数个则有n/2个。【代码】小编写的时候不知道这个公式,所以暴力破解 publicstaticvoidmain(String[]args){ doublesum=0; for(doublei=0;i<2019;i++){ if(sum>=2019){ break; } sum=sum+Math.pow(2,i); System.out.println("该层有节点"+Math.pow(2,i)+"个---------------"+"树的层数"+(i+1)+"总计:"+sum); } System.out.println(1024-(2047-2019)/2); }【输出】该层有节点1.0个---------------树的层数1.0总计:1.0该层有节点2.0个---------------树的层数2.0总计:3.0该层有节点4.0个---------------树的层数3.0总计:7.0该层有节点8.0个---------------树的层数4.0总计:15.0该层有节点16.0个---------------树的层数5.0总计:31.0该层有节点32.0个---------------树的层数6.0总计:63.0该层有节点64.0个---------------树的层数7.0总计:127.0该层有节点128.0个---------------树的层数8.0总计:255.0该层有节点256.0个---------------树的层数9.0总计:511.0该层有节点512.0个---------------树的层数10.0总计:1023.0该层有节点1024.0个---------------树的层数11.0总计:2047.01010 【问题描述】在1至2019中,有多少个数的数位中包含数字9?注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含数字9,在计算只是算一个数。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。【答案】544【分析】将整型转为字符串型,利用Stringapi的indexOf(),当一个数中没有出现字符9,返回-1【代码】 publicstaticvoidmain(String[]args){ intcount=0; for(inti=1;i<=2019;i++){ if(String.valueOf(i).indexOf('9')!=-1){ count++; } } System.out.println(count); }【输出】544 【问题描述】一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。给定正整数n,请问在整数1至n中有多少个数位递增的数?【输入格式】输入的第一行包含一个整数n。【输出格式】输出一行包含一个整数,表示答案。【样例输入】30【样例输出】26【评测用例规模与约定】对于40%的评测用例,1>=n>=1000。对于80%的评测用例,1>=n>=100000。对于所有评测用例,1>=n>=1000000。【分析】首先想到的是指针指向整数的第一位,第一位与后一位进行比较。后来又想到可以用递归的方法,没想出来,于是借鉴了别人的代码【代码】非递归 publicstaticvoidmain(String[]args){ Scannerscan=newScanner(System.in); intn=scan.nextInt(); System.out.println(fun(n)); } publicstaticintfun(intn){ intcount=0; booleanflag=true; for(inti=1;i<=n;i++){ flag=true; StringnumString=String.valueOf(i); for(intj=0;j publicstaticintn=0; publicstaticintcount=0; publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); n=sc.nextInt(); sc.close(); fun(0,1); System.out.println(count-1); } publicstaticintfun(intnum,inttemp){ //num这个数,temp是位数 if(num>n){ return0; }else{ count++; } for(inti=temp;i<10;i++){ fun(num*10+i,i); } returncount; }递增三元组【问题描述】在数列a[1],a[2],...,a[n]中,如果对于下标i,j,k满足0 publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); intn=sc.nextInt(); intm=sc.nextInt(); int[]num=newint[n]; int[]order=newint[n]; for(inti=0;i publicstaticvoidmain(String[]args){ System.out.println(Integer.valueOf("1949",16)); }互质个数【问题描述】不超过19000的正整数中,与19000互质的数的个数是多少?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。【答案】7200【代码】 publicstaticvoidmain(String[]args){ intans=0; for(inti=1;i<=19000;i++){ if(gcd(i,19000)==1){ ans++; } } System.out.println(ans); } publicstaticintgcd(inta,intb){ if(b==0){ returna; } returngcd(b,a%b); }最大公约数【问题描述】70044与113148的最大公约数是多少?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。【答案】5388【代码】 publicstaticvoidmain(String[]args){ System.out.println(gcd(70044,113148)); } publicstaticintgcd(inta,intb){ if(b==0){ returna; } returngcd(b,a%b); }最多节点数【问题描述】一棵10层的二叉树,最多包含多少个结点?注意当一棵二叉树只有一个结点时为一层。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。【答案】512【代码】 publicstaticvoidmain(String[]args){ System.out.println((int)Math.pow(2,9)); }洁净数【问题描述】小明非常不喜欢数字2,包括那些数位上包含数字2的数。如果一个数的数位不包含数字2,小明将它称为洁净数。请问在整数1至n中,洁净数有多少个?【输入格式】输入的第一行包含一个整数n。【输出格式】输出一行包含一个整数,表示答案。【样例输入】30【样例输出】18【评测用例规模与约定】对于40%的评测用例,1<=n<=10000。对于80%的评测用例,1<=n<=100000。对于所有评测用例,1<=n<=1000000。【代码】 publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); intn=sc.nextInt(); intans=0; for(inti=1;i<=n;i++){ if(!String.valueOf(i).contains("2")){ ans++; } } System.out.println(ans); }最大距离【问题描述】在数列a_1,a_2,...,a_n中,定义两个元素a_i和a_j的距离为|i-j|+|a_i-a_j|,即元素下标的距离加上元素值的差的绝对值,其中|x|表示x的绝对值。给定一个数列,请问找出元素之间最大的元素距离。【输入格式】输入的第一行包含一个整数n。第二行包含n个整数a_1,a_2,...,a_n,相邻的整数间用空格分隔,表示给定的数列。【输出格式】输出一行包含一个整数,表示答案。【样例输入】594247【样例输出】9【样例说明】a_1和a_3的距离为|1-3|+|9-2|=9。【评测用例规模与约定】对于50%的评测用例,2<=n<=100,0<=数列中的数<=1000。对于所有评测用例,2<=n<=1000,0<=数列中的数<=10000。【代码】