2015第六届蓝桥杯真题预赛选择填空

/*
标题: 购物单

    小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。

    这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。
    小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。
    现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。

    取款机只能提供100元面额的纸币。小明想尽可能少取些现金,够用就行了。
    你的任务是计算出,小明最少需要取多少现金。

以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。
-----------------
****     180.90       88折
****      10.25       65折
****      56.14        9折
****     104.65        9折
****     100.30       88折
****     297.15        半价
****      26.75       65折
****     130.62        半价
****     240.28       58折
****     270.62        8折
****     115.87       88折
****     247.34       95折
****      73.21        9折
****     101.00        半价
****      79.54        半价
****     278.44        7折
****     199.26        半价
****      12.97        9折
****     166.30       78折
****     125.50       58折
****      84.98        9折
****     113.35       68折
****     166.57        半价
****      42.56        9折
****      81.90       95折
****     131.78        8折
****     255.89       78折
****     109.17        9折
****     146.69       68折
****     139.33       65折
****     141.16       78折
****     154.74        8折
****      59.42        8折
****      85.44       68折
****     293.70       88折
****     261.79       65折
****      11.30       88折
****     268.27       58折
****     128.29       88折
****     251.03        8折
****     208.39       75折
****     128.88       75折
****      62.06        9折
****     225.87       75折
****      12.89       75折
****      34.28       75折
****      62.16       58折
****     129.12        半价
****     218.37        半价
****     289.69        8折
--------------------

需要说明的是,88折指的是按标价的88%计算,而8折是按80%计算,余者类推。
特别地,半价是按50%计算。

请提交小明要从取款机上提取的金额,单位是元。
答案是一个整数,类似4300的样子,结尾必然是00,不要填写任何多余的内容。


特别提醒:不许携带计算器入场,也不能打开手机。


*/

答案:5200

方法:用excel或者电脑上的计算器,其中Excel分列时注意粘贴在哪一行就将那一列分列。

 

立方变自身

观察下面的现象,某个数字的立方,按位累加仍然等于自身。
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 int sum = 0;
	public static void main(String[] args) {
		
		for(int i  = 1; i <= 100000000; i ++) {
		
			if(check(i)) {
				System.out.println(i);
				sum ++;
			}
		}

	}
	private static boolean check(int i) {
		int n = 0;
		int x = i  * i * i;
		while(x > 0) {
			n += x % 10;
			x = x /10;
		}
		if(n == i) return true;
		return false;
	}

}

 

 

三羊献瑞

观察下面的加法算式:

      祥 瑞 生 辉
  +   三 羊 献 瑞
-------------------
   三 羊 生 瑞 气

(如果有对齐问题,可以参看【图1.jpg】)

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

*/
/*
      a b c d
  +   e f g b
-------------------
    e f c b i

   e=1,a=9,f=0,c=b+1,c+g>10

答案:1085

方法:将八个不同的字分别用八个不同的数字代替,用到8/10全排列,我采用的是dfs

代码:

public class Main {
	public static int a[] = new int[9];
	public static boolean vis[] = new boolean[10];
	
	public static void main(String[] args) {
		dfs(0);

	}

	private static void dfs(int n) {
		if(n == 8) {
			if(check()) {
				System.out.println(a[4] * 1000 + a[3] * 100 + a[5] * 10 + a[6]);
				System.out.println(a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3]);
				
				System.out.println(a[0] * 10000 + a[1] * 1000 + a[5] * 100 + a[3] * 10 + a[7]);
				System.out.println();
			}
			return;
		}
		for(int i = 0; i <=9; i ++) {
			if(!vis[i]) {
				vis[i] = true;
				a[n] = i;
				dfs(n + 1);
				vis[i] = false;
				
			}
		}
	}

	private static boolean check() {
		int t1, t2, t3;
		t1 = a[4] * 1000 + a[3] * 100 + a[5] * 10 + a[6];
		t2 = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
		t3 = a[0] * 10000 + a[1] * 1000 + a[5] * 100 + a[3] * 10 + a[7];
		if(t1 + t2 == t3) return true;
		return false;
	}

}

 

/*
循环节长度

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,11/13=6=>0.846153846153.....  其循环节为[846153] 共有6位。
下面的方法,可以求出循环节的长度。

请仔细阅读代码,并填写划线部分缺少的代码。

    
注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。

*/
public class Main {

    public static void main(String[] args) {
        System.out.println( f(11,13));
        
    }
    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);  //填空
        }
    }

}
 

 

/*
九数组分数

1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?

下面的程序实现了该功能,请填写划线部分缺失的代码。

public class A
{
    
}

注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。

*/
public class Main {
    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);
            int t=x[i]; x[i]=x[k]; x[k]=t;    // 填空
        }
    }
    
    public static void main(String[] args)
    {
        int[] x = {1,2,3,4,5,6,7,8,9};        
        f(x,0);
    }
}
 

 

加法变乘法

我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015

比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。

请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

注意:需要你提交的是一个整数,不要填写任何多余的内容。

*/

答案:16

方法:枚举

代码: 

public class Main {
    public static int a[] = new int[3];
    //public static int 

    public static void main(String[] args) {
        int sum = 0;
        for(int i = 1;i <= 47;i ++) {
            
            a[0] = i;
            for(int j = i + 2;j <= 48; j ++) {
                a[1] = j;
                sum = 0;
                for(int k = 1;k <= 49; k++) {
                    if(k == a[0] || a[1] == k) {
                        sum += k * (k + 1);
                        k ++;
                    }
                    else sum += k;
                }
                /*System.out.println(a[0]);
                System.out.println(a[1]);
                System.out.println();*/
                
                if(sum == 2015) {
                    System.out.println(a[0]);
                    System.out.println(a[1]);
                    System.out.println();
                }
            }
            //System.out.println(sum);
            
        }
        /*for(int k = 1;k <= 49; k++) {
            if(k == 10 || 27 == k) {
                sum += k * (k + 1);
                k ++;
            }
            else sum += k;
        }
        System.out.println(sum);*/

    }

}


 

/*
牌型种数

小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?

请填写该整数,不要填写任何多余的内容或说明文字。
*/

答案:3598180

方法:dfs深搜

代码: 

public class Main {
    public static int a[] = new int[14];
    public static int vis[] = new int[14];
    public static int sum = 0;
    public static void main(String[] args) {
        dfs(0,13);
        System.out.println(sum);
    }
    private static void dfs(int n,int l) {
        if(l < 0) {
            return;
        }
        if(n == 13) {
            if(l == 0) {
                sum ++;
            }
            return ;
        }
        if(n > 13) {
            return;
        }
        
            dfs(n + 1,l);
            dfs(n + 1,l - 1);
            dfs(n + 1,l - 2);
            dfs(n + 1,l - 3);
            dfs(n + 1,l - 4);
        
    }

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值