小明到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)