算法之蓝桥杯java B组

•    1. 武功秘籍
    小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他
意识到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。

    小明只想练习该书的第81页到第92页的武功,又不想带着整本书。请问他至少要撕下多少张纸带走?

这是个整数,请通过浏览器提交该数字,不要填写任何多余的内容。


好学的小明啊哈哈,书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。这个的意思 是双面印,10和11页是一页。也就是说10+2n和11+2n在同一张纸上呗。。81页的话得带上80页了吧。为什么 觉得直接口算就出来 了。。这还写什么 代码啊。、那就写个int Pagenum(int start,int end)的方法吧。


package test;

public class algorithms {
	public static void main(String[] args) {
		System.out.println(Pagenum(81, 92));
	}

	private static int Pagenum(int start, int end) {
		int result = 0;
		if (start % 2 != 0) {
			start--;
		}
		if (end % 2 == 0) {
			end++;
		}
		for (int i = start; i < end; i += 2) {
			System.out.println("(" + i + "," + (i + 1) + ")");
			result++;
		}
		return result;

	}
}

结果(80,81)(82,83)(84,85)(86,87)(88,89)(90,91)(92,93)7

•    2. 切面条
   一根高筋拉面,中间切一刀,可以得到2根面条。
  如果先对折1次,中间切一刀,可以得到3根面条。  
 如果连续对折2次,中间切一刀,可以得到5根面条。
 那么,连续对折10次,中间切一刀,会得到多少面条呢?
答案是个整数,请通过浏览器提交答案。不要填写任何多余的内容。

这个太简单不解释了。。

public class algorithms {
	public static void main(String[] args) {
		System.out.println(num(10));
	}

	private static int num(int time) {
		int result = 0;
		result=(int) ((int)Math.pow(2, time)+1);
		return result;
	}
}

•    3. 猜字母
把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。

    接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。

    得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。

答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。

用递归吧

有两种方法

第一种用链表。这个在c语言比赛里边估计不行吧。不知道-0-,不过在java比赛里边可是方便多了。效率还高。

第二种用数组,把偶数的提出来单放到一个数组里再递归

	for (int i = 0; i < temp.size(); i++) {
			if (i%2==1) {
				temp.remove(i);
				System.out.println(i);
			}
		}
在用链表的时候发现了这个问题,不能直接remove,这样后边的字母会自动移动到前面。这样就无法做到只移除奇数了。。那么。。我还是想用链表。。不能说自己是错的啊哈哈,第一种方法 就是可以用。不能remove我们再替换嘛~最后再整理一下不就行 了

package test;

import java.awt.List;
import java.util.LinkedList;

public class algorithms {

	public static void main(String[] args) {
		java.util.List<Character> temp = new LinkedList<Character>();
		for (int i = 0; i < 106; i++) {
			for (int j = 0; j < 19; j++) {
				temp.add((char) ('a' + j));
			}
		}
		System.out.println(getresult(temp));
	}

	private static char getresult(java.util.List<Character> temp) {
		// TODO Auto-generated method stub
		if (temp.size() == 1) {
			return temp.get(0);
		}
		for (int i = 0; i < temp.size(); i++) {
			if (i % 2 == 0) {
				temp.set(i, 'z');
			}
		}
		for (int i = 0; i < temp.size(); i++) {
			if (temp.get(i).equals('z')) {
				temp.remove(i);
			}
		}

		return getresult(temp);
	}
}
这里刚才 还真是马虎了一下。看见从第1个开始以为是从下标1开始。。

•    4. 大衍数列
标题:大衍数列

    中国古代文献中,曾记载过“大衍数列”, 主要用于解释中国传统文化中的太极衍生原理。

    它的前几项是:0、2、4、8、12、18、24、32、40、50 ...

    其规律是:对偶数项,是序号平方再除2,奇数项,是序号平方减1再除2。

    以下的代码打印出了大衍数列的前 100 项。
for(int i=1; i<100; i++)
{
    if(i%2==0)  //填空
        System.out.println(i*i/2);
    else
        System.out.println((i*i-1)/2);

}
    请填写划线部分缺失的代码。通过浏览器提交答案。
注意:不要填写题面已有的内容,也不要填写任何说明、解释文字。

哈哈?我一直以为8后边 应该是16呢


这个。。应该是题的问题。答案给写出来 了。。就是i%2==0。。==


•    5. 圆周率
  数学发展历史上,圆周率的计算曾有许多有趣甚至是传奇的故事。其中许多方法都涉及无穷级数。

    图1.png中所示,就是一种用连分数的形式表示的圆周率求法。

    下面的程序实现了该求解方法。实际上数列的收敛对x的初始值 并不敏感。    

    结果打印出圆周率近似值(保留小数点后4位,并不一定与圆周率真值吻合)。

    double x = 111;
    for(int n = 10000; n>=0; n--){
        int i = 2 * n + 1;
        x = 2 + (i*i / x);
    }
    
    System.out.println(String.format("%.4f", ______________));

无图无真相 啊这。。只能说一下答案了。

4 / (x - 1)






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值