目录
第一题:猜字母
题目描述
把abcd…s共19个字母组成的序列重复拼接106次,得到长度为2014的串。接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。
题目分析
字符串的删除
这个代码意思是直接在原字符串上删除元素并且返回这个对象 str.deleteCharAt(i)
所以下面这个循环是错误的
while (true){ if (str.length()==1){ break; } for (int i =0;i<str.length();i+=2){ str.deleteCharAt(i); } }
题目代码
方法一:
import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { String s = ""; for(int i=1;i<=106;i++) { s = s+ "abcdefghijklmnopqrs"; } String t = ""; while(s.length()!=1) { t = ""; for(int i=1;i<s.length();i=i+2) { t = t + s.charAt(i); } s = t; } System.out.println(s); } }
方法二:
public class Main { public static void main(String[] args) { String string = "abcdefghijklnmopqls"; StringBuffer str = new StringBuffer(""); for (int i = 0;i<106;i++){ str=str.append(string); } while (true){ if (str.length()==1){ break; } for (int i =0;i<str.length();i+=2){ str.replace(i,i+1,"w"); } for (int i = 0;i<str.length();i++){ if (str.charAt(i)=='w'){ str.deleteCharAt(i); } } } System.out.println(str); } }
第二题:奇怪的分式
题目描述
上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:
1/4 乘以 8/5
小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)
老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!
对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢?
请写出所有不同算式的个数(包括题中举例的)。
显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。
但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!
注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。
题目分析
遇到除法的可以想到能不能转换成乘法
题目代码
public class 奇怪的分式 { public static void main(String[] args) { int count = 0; String s1 = null; String s2 = null; int c = 0; int d = 0; for (int i = 1; i <= 9; i++) { for (int j = 1; j <= 9; j++) { if (i != j) for (int k = 1; k <= 9; k++) { for (int l = 1; l <= 9; l++) { if (k != l) { s1 = (i + "") + (k + ""); s2 = (j + "") + (l + ""); c = Integer.parseInt(s1); d = Integer.parseInt(s2); if (i * k * d == j * l * c) { count++; } } } } } } System.out.println(count ); } }
第三题:分糖果
题目描述
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
【格式要求】
程序首先读入一个整数N(2<N<100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
要求程序输出一个整数,表示老师需要补发的糖果数。
例如:输入
3
2 2 4
程序应该输出:
4
题目分析
围成一圈可以用数组来表示,将第一个人和最后一个人特殊处理
题目代码
import java.util.Scanner; public class 分糖果 { public static void main(String[] args) { Scanner sca = new Scanner(System.in); int n = sca.nextInt(); int[] arr = new int[n]; for (int i = 0; i < arr.length; i++) { arr[i] = sca.nextInt(); } int tangGuo = 0; while (true) { //奇数加糖果 for (int i = 0; i < arr.length; i++) { if (arr[i] % 2 != 0) { arr[i]++; tangGuo++; } } //分糖果 int temp = arr[0] / 2; for (int i = 0; i < arr.length - 1; i++) { arr[i] = arr[i] / 2 + arr[i + 1] / 2; } arr[arr.length - 1] = temp + arr[arr.length - 1] / 2; //记录糖果相同的人数 int x = 0; for (int i = 0; i <= arr.length - 2; i++) { if (arr[i] == arr[i + 1]) { x++; } } //注意这里是n-1 if (x==n-1){ System.out.println(tangGuo); break; } } } }