a[c]=1;
Strings="A"+(char)(b+'A')+(char)(c+'A');
f(s,a);
a[c]=0;
}
a[b]=0;
}
}
}
仔细阅读代码,填写划线部分缺少的内容。
注意:
不要填写任何已有内容或说明性文字。
第六题:
凑算式
BDEF
A+---+-------=10
CGHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714就是一种解法,
5+3/1+972/486是另一种解法。
这个算式一共有多少种解法?
注意:
你提交应该是个整数,不要填写任何多余的内容或说明性文字。
递归:
staticintcount=0;
staticboolean[]date;
publicstaticvoidmain(String[]args){
int[]a=newint[10];
date=newboolean[10];
dp(a,1);
System.out.println(count);
}
staticvoiddp(int[]a,ints)
{
if(s==10)
{
if(a[3]==0||a[7]==0||a[8]==0||a[9]==0)
{
return;
}
doubleq=(double)a[2]/a[3];
doublew=(a[4]*100+a[5]*10+a[6])*1.00/(a[7]*100+a[8]*10+a[9]);
doublee=(double)a[1];
if(q+w+e==10.00)
count++;
return;
}
for(inti=1;i<=9;i++)
{
if(date[i]==false)
{
date[i]=true;
a[s]=i;
dp(a,s+1);
date[i]=false;
}
}
}
答案:
29
第七题:
搭积木
小明最近喜欢搭数字积木,
一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则:
每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木。
下面是两种合格的搭法:
0
12
345
6789
0
31
752
9864
请你计算这样的搭法一共有多少种?
请填表示总数目的数字。
注意:
你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
递归:
staticintcount=0;
staticboolean[]date;
publicstaticvoidmain(String[]args){
int[]a=newint[10];
date=newboolean[10];
dp(a,0);
System.out.println(count);
}
staticvoiddp(int[]a,ints)
{
if(s==10)
{
if(a[0]>a[1]||a[0]>a[2])
return;
elseif(a[1]>a[3]||a[1]>a[4])
return;
elseif(a[2]>a[4]||a[2]>a[5])
return;
elseif(a[3]>a[6]||a[3]>a[7])
return;
elseif(a[4]>a[7]||a[4]>a[8])
return;
elseif(a[5]>a[8]||a[5]>a[9])
return;
else
{
count++;
return;
}
}
for(inti=0;i<=9;i++)
{
if(date[i]==false)
{
date[i]=true;
a[s]=i;
dp(a,s+1);
date[i]=false;
}
}
}
答案:
768
第八题:
冰雹数
任意给定一个正整数N,
如果是偶数,执行:
N/2
如果是奇数,执行:
N*3+1
生成的新的数字再执行同样的动作,循环往复。
通过观察发现,这个数字会一会儿上升到很高,
一会儿又降落下来。
就这样起起落落的,但最终必会落到“1”
这有点像小冰雹粒子在冰雹云中翻滚增长的样子。
比如N=9
9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1
可以看到,N=9的时候,这个“小冰雹”最高冲到了52这个高度。
输入格式:
一个正整数N(N<1000000)
输出格式:
一个正整数,表示不大于N的数字,经过冰雹数变换过程中,最高冲到了多少。
例如,输入:
10
程序应该输出:
52
再例如,输入:
100
程序应该输出:
9232
资源约定:
峰值内存消耗(含虚拟机)<256M
CPU消耗<1000ms
请严格按要求输出,不要画蛇添足地打印类似:
“请您输入...”的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:
不要使用package语句。
不要使用jdk1.7及以上版本的特性。
注意:
主类的名字必须是:
Main,否则按无效代码处理。
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
intN=sc.nextInt();
intmax1=0;
for(inti=N;i>1;i--)
{
intti=i;
while(ti>1)
{
if(ti%2==0)
{
ti=ti/2;
}
elseif(ti%2!
=0)
{
ti=ti*3+1;
}
max1=Math.max(ti,max1);
}
}
System.out.println(max1);
}
第九题:
四平方和
四平方和定理,又称为拉格朗日定理:
每个正整数都可以表示为至多4个正整数的平方和。
如果把0包括进去,就正好可以表示为4个数的平方和。
比如:
5=0^2+0^2+1^2+2^2
7=1^2+1^2+1^2+2^2
(^符号表示乘方的意思)
对于一个给定的正整数,可能存在多种平方和的表示法。
要求你对4个数排序:
0<=a<=b<=c<=d
并对所有的可能表示法按a,b,c,d为联合主键升序排列,最后输出第一个表示法
程序输入为一个正整数N(N<5000000)
要求输出4个非负整数,按从小到大排序,中间用空格分开
例如,输入:
5
则程序应该输出:
0012
再例如,输入:
12
则程序应该输出:
0222
再例如,输入:
773535
则程序应该输出:
11267838
资源约定:
峰值内存消耗(含虚拟机)<256M
CPU消耗<3000ms
请严格按要求输出,不要画蛇添足地打印类似:
“请您输入...”的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:
不要使用package语句。
不要使用jdk1.7及以上版本的特性。
注意:
主类的名字必须是:
Main,否则按无效代码处理。
intmain()
{
inta,b,c,n,flag=0;
doublemaxN,d;
scanf("%d",&n);
maxN=sqrt(n);
for(a=0;a<=maxN;a++){
for(b=a;b<=maxN;b++){
for(c=b;c<=maxN;c++){
d=sqrt(n-a*a-b*b-c*c);
if(d==(int)d){
printf("%d%d%d%d\n",a,b,c,(int)d);
flag=1;
break;
}
}
if(flag)
break;
}
if(flag)
break;
}
return0;
}
第十题
密码脱落
X星球的考古学家发现了一批古代留下来的密码。
这些密码是由A、B、C、D四种植物的种子串成的序列。
仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。
由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。
你的任务是:
给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。
输入一行,表示现在看到的密码串(长度不大于1000)
要求输出一个正整数,表示至少脱落了多少个种子。
例如,输入:
ABCBA
则程序应该输出:
0
再例如,输入:
ABECDCBABC
则程序应该输出:
3
资源约定:
峰值内存消耗(含虚拟机)<256M
CPU消耗<3000ms
请严格按要求输出,不要画蛇添足地打印类似:
“请您输入...”的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:
不要使用package语句。
不要使用jdk1.7及以上版本的特性。
注意:
主类的名字必须是:
Main,否则按无效代码处理。
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
Stringst=sc.next();
char[]s=st.toCharArray();
intcount=0;
intmax=0;
inti=0,n=0,j=st.length()-1;
intti,tj;
while(i<=j)
{
if(s[i]==s[j])
{
i++;
j--;
}
else
{
ti=i;
tj=j;
//以右边为标记左边为游标寻找相等的情况
while(s[ti]!
=s[j]&&ti{
ti++;
}
//以左边为标记右边为游标寻找相等的情况
while(s[i]!
=s[tj]&&i<=tj)
{
tj--;
}
//比较这个游标移动的距离,取小的距离
if((ti-i)<(j-tj))
{
n+=ti-i;
i=ti;//将i置为新的起点
}
else
{
n+=j-tj;
j=tj;//将j置为新的终点
}
}
}
System.out.println(n);
}