JAVA编程练习
- 读入一个字符串str,输出字符串str中的连续最长的数字串
输入样例:
abcd12345ed125ss123456789
输出样例:
123456789
解题思路:遍历字符串数组,若在字符’0’到’9’之间,则存入当前结果,若不在其区间,则跳出循环,i++。判断下一循环的count若大于上一次遍历的result.length,则更新result。
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
String result = "";
int count = 0;
char [] arr = string.toCharArray();
for(int i = 0; i< arr.length;i++){
if(arr[i] >= '0' && arr[i] <= '9'){
count = 1;
int index = i;
for(int j=i+1;j<arr.length;j++){
if('0'<=arr[j] && '9'>= arr[j]){
count++;
index =j;
}else {
break;
}
}if(count>result.length()){
result = string.substring(i, index+1);//前闭后开区间
}
}else{
continue;
}
}
System.out.println(result);
}
}
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
解题思路:对数组进行排序,若要输出出现超过数组长度一半的数字,则该数字的值必定>数组中间位置的值。
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
Arrays.sort(array);
int len=array.length;
int num=array[len/2]; //若出现次数超过一半,则num的值肯定等于该数字值
int count=0;
for(int i=0;i<array.length;i++){
if(array[i]==num){
count++;
}
}
return count>(len/2)?num:0;
}
}
3.A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:
A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.
现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件
输入描述:
输入为一行,一共4个整数,分别为A - B,B - C,A + B,B + C,用空格隔开。 范围均在-30到30之间(闭区间)。
输出描述:
输出为一行,如果存在满足的整数A,B,C则按顺序输出A,B,C,用空格隔开,行末无空格。 如果不存在这样的整数A,B,C,则输出No
解题思路:A - B = a 、 B - C = b 、A + B = c 、B + C = d ;A=(a+c)/2; B=(c-a)/2=(b+d)/2; (若解得两个B不等,则输出NO); C=(d-b)/2;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
int d = scanner.nextInt();
int A = (a+c)/2;
int C = (d-b)/2;
int B1 = (b+d)/2;
int B2 = (c-a)/2;
if(B1 != B2){
System.out.println("NO");
}else{
System.out.println(A+" "+B2+" "+C);
}
}
}
4.给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
输入描述:
输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。
输出描述:
为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)
解题思路:通过除掉进制数,进入下一个进制位计算。
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int n = scanner.nextInt();
boolean flag = false;
String table = "0123456789ABCDEF";
StringBuilder ret = new StringBuilder();
if(m<0){
m = -m;
flag = true;
}
while (m!=0){
ret.append(table.charAt(m%n)); //拿到最低位(个位)
m = m /n; //删除最大位循环
}
if(flag){
ret.append("-");
}
ret.reverse();
System.out.println(ret);
}
}