2015_Java_B 蓝桥杯真题(1)
2015_Java_B 蓝桥杯真题(1)
(蓝桥杯2015真题)
1.(201501).题目标题: 三角形面积
如图1所示。图中的所有小方格面积都是1。
那么,图中的三角形面积应该是多少呢?
请填写三角形的面积。不要填写任何多余内容或说明性文字。
答案:28
2.(201502)题目标题:
立方变自身
观察下面的现象,某个数字的立方,按位累加仍然等于自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17
…
请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?
请填写该数字,不要填写任何多余的内容或说明性的文字。
//答案:6
public class Main{
public static void main(String[] args){
int count=0;
for(int i=1;i<99;i++){
//范围
int sum=0;
int temp=i*i*i;
while(temp!=0){
sum+=temp%10;//每位数字相加
temp=temp/10;
}
if(sum==i){
count++;
}
}
System.out.println(count);
}
}
3.(201503)题目: 三羊献瑞
观察下面的加法算式:
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
分析:
由图可知: 三:1;
答案:1085
//暴力法
public class F03_三羊献瑞 {
public static void main(String[] args){
int 三=1;
for(int 祥=0;祥<=9;祥++){
if(祥!=1)for(int 瑞=0;瑞<=9;瑞++){
if(瑞!=1&&瑞!=祥) for(int 生=0;生<=9;生++){
if(生!=1&&生!=祥&&生!=瑞)for(int 辉=0;辉<=9;辉++){
if(辉!=1&&辉!=祥&&辉!=瑞&&辉!=生) for(int 羊=0;羊<=9;羊++){
if(羊!=1&&羊!=祥&&羊!=瑞&&羊!=生&&羊!=辉)for(int 献=0;献<=9;献++){
if(献!=1&&献!=祥&&献!=瑞&&献!=生&&献!=辉&&献!=羊)for(int 气=0;气<=9;气++){
if(气!=1&&气!=祥&&气!=瑞&&气!=生&&气!=辉&&气!=羊&&气!=献){
if(献!=1&&献!=祥&&献!=瑞&&献!=生&&献!=辉&&献!=羊){
if((辉+瑞)%10==气&&
((生+献)+(辉+瑞)/10)%10==瑞&&
((瑞+羊)+((生+献)+(辉+瑞)/10)/10)%10==生&&
((祥+1)+((瑞+羊)+((生+献)+(辉+瑞)/10)/10)/10)%10==羊&&
((祥+1)+((瑞+羊)+((生+献)+(辉+瑞)/10)/10)/10)/10==1)
{
System.out.println(三*1000+羊*100+献*10+瑞);
}
}
}
}
}
}
}
}
}
}
}
}
4.(201504)题目:循环节长度
两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,11/13=6=>0.846153846153… 其循环节为[846153] 共有6位。
下面的方法,可以求出循环节的长度。
请仔细阅读代码,并填写划线部分缺少的代码。
public static int f(int n, int m)
{
n = n % m;
Vector v = new Vector();
for(;;)
{
v.add(n);
n *= 10;
n = n % m;
if(n==0) return 0;
if(v.indexOf(n)>=0) _________________________________ ; //填空
}
}
注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。
答案:
return v.size()-v.indexOf(n)
5.(201505)题目:九数组分数
1,2,3…9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
下面的程序实现了该功能,请填写划线部分缺失的代码。
public class A
{
public static void test(int[] x)
{
int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];
if(a*3==b) System.out.println(a + " " + b);
}
public static void f(int[] x, int k)
{
if(k>=x.length){
test(x);
return;
}
for(int i=k; i<x.length; i++){
{int t=x[k]; x[k]=x[i]; x[i]=t;}
f(x,k+1);
_______________________________________ // 填空
}
}
public static void main(String[] args)
{
int[] x = {1,2,3,4,5,6,7,8,9};
f(x,0);
}
}
注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。
答案:(全排列 回溯)
{
int t=x[k]; x[k]=x[i]; x[i]=t;}
6.(201506)题目:加法变乘法
我们都知道:1+2+3+ … + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+…+1011+12+…+2728+29+…+49 = 2015
就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
注意:需要你提交的是一个整数,不要填写任何多余的内容。
答案:16
//枚举
public class Main {
public static void main(String[] args){
//第一个"+"变成"*" i+i+1 --> i*(i+1)
for(int i=1;i<=46;i++){
//第二个"+"变成"*" j+j+1-->j*(j+1)
for(int j=i+2;j<=48;j++){
//i+i+1 + j+j+1+...=1225
//i*(i+1) + j*(j+1)+...=2015
//i*(i+1) + j*(j+1) -(i+i+1 + j+j+1)=2015-1225
if(i*(i+1) + j*(j+1) -(i+i+1 + j+j+1)==2015-1225){
System.out.println(i);
}
}
}
}
}