1、实现两个大数的相加。如 222423523452345+ 245235234523452345452,不要使用java.math.BigInteger
2、字符串单词的提取。
3、求一个字符串中的最大回文字符串。
8、问题描述:
我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:
1、 长度13位;
2、 以86的国家码打头;
3、 手机号码的每一位都是数字。
请实现手机号码合法性判断的函数(注:考生无需关注手机号码的真实性,也就是说诸如86123123456789这样的手机号码,我们也认为是合法的),要求:
1) 如果手机号码合法,返回0;
2) 如果手机号码长度不合法,返回1
3) 如果手机号码中包含非数字的字符,返回2;
4) 如果手机号码不是以86打头的,返回3;
【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。
要求实现函数:
int s int verifyMsisdn(char* inMsisdn)
【输入】 char* inMsisdn,表示输入的手机号码字符串。
【输出】 无
【返回】 判断的结果,类型为int。
示例
输入: inMsisdn = “869123456789“
输出: 无
返回: 1
输入: inMsisdn = “8813912345678“
输出: 无
返回: 3
输入: inMsisdn = “8613912345678“
输出: 无
8、
10、将一个字符串的元音字母复制到另一个字符串,并进行排序操作。输入:Abort!May Be Some Errors In Out System.输出:aeeeooAEIO
public class Test6 {
/**
* @param 大数相加
*/
public String add(String str1,String str2){
int jinwei = 0;
StringBuffer sb1 = new StringBuffer(str1); sb1.reverse();
StringBuffer sb2 = new StringBuffer(str2); sb2.reverse();
int len1=sb1.length(),len2=sb2.length(),minLen = (len1>len2)?len2:len1;
StringBuffer sb = new StringBuffer("");
for(int i=0;i<minLen;i++){
int single =Integer.parseInt(sb1.charAt(i)+"")+Integer.parseInt(sb2.charAt(i)+"")+jinwei;
sb.append(single%10);
jinwei = single /10;
}
if(len1==len2){
sb.append(jinwei);
return sb.reverse().toString();
}else if(len1>len2){
for(int i=len2;i<len1;i++){
int single =Integer.parseInt(sb1.charAt(i)+"")+jinwei;
sb.append(single%10);
jinwei = single /10;
}
sb.append(jinwei);
return sb.reverse().toString();
}else{
for(int i=len1;i<len2;i++){
int single =Integer.parseInt(sb2.charAt(i)+"")+jinwei;
sb.append(single%10);
jinwei = single /10;
}
sb.append(jinwei);
return sb.reverse().toString();
}
}
public static void main(String[] args) {
Test6 test6 = new Test6();
System.out.println(test6.add("123543534523452435243523452345243524352342345234523452", "9234523453245234523423452455234523452435341"));
}
}
2、字符串单词的提取。
import java.util.regex.*;
public class Test5 {
/**
* @param 将一个字符串中的单词提取出来
*/
public String getWords(String str,String reg){
Pattern pat = Pattern.compile(reg);
Matcher mat = pat.matcher(str);
StringBuffer sb = new StringBuffer("") ;
while(mat.find()){
sb.append(mat.group(1)+",");
}
return sb.toString();
}
public static void main(String[] args) { // \b:单词的边界
Test5 test5 = new Test5();
System.out.println(test5.getWords("hello my name is 123swh!","\\b(\\w+)\\b"));
}
}
3、求一个字符串中的最大回文字符串。
import java.util.Scanner;
public class Test4 {
/**
* @param 求一个字符串中的最大回文字符串
*/
public boolean huiwen(String str){
StringBuffer sb1 = new StringBuffer(str);
sb1.reverse();
return str.equals(sb1.toString());
}
//进行信息的定位
public int[] selectHuiwen(String str){
int[] res = new int[3];
int max=0,start=0,end=0;
int len = str.length();
for(int i=0;i<len;i++)
for(int j= i+1;j<len;j++){
if(huiwen(str.substring(i,j+1))){
if((j-i+1)>max){
start = i;
end = j+1;
max = j-i+1;
}
}
}
res[0] = max;res[1] = start;res[2] = end;
return res;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
Test4 test4 = new Test4();
System.out.println(str.substring(test4.selectHuiwen(str)[1], test4.selectHuiwen(str)[2]));
}
}
4、分解因式。我直接使用递归的方法
import java.util.Scanner;
public class Test3 {
/**
* @分解因式
*/
public static String fenjie(int num){
if(num == 1)
return "1";
for(int j=2;j<=num;j++)
{
if(num % j ==0)
return j+"*"+fenjie(num/j);
}
return null;
}
public static void main(String[] args) {
Test3 test3 = new Test3();
Scanner scan = new Scanner(System.in);
int inp = scan.nextInt();
//System.out.println(scan.nextLine());
System.out.println(test3.fenjie(inp));
}
}
5、正则表达式的使用。将输入字符 122453234 中的3x5替换为-3x5- ,如 1234534,output: 12-345-34
import java.sql.Timestamp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class regexTest {
public static void main(String args[])
{
String string="12345673254";
System.out.println(regexTest.regexReplace("3(\\S{1})5", "-$0-", string));
//其实这样就一步就可以了,但是使用了Pattern和Matcher就是为了熟悉正则表达式
// System.out.println(string.replaceAll("3(\\S{1})5", "-$1-"));
}
public static String regexReplace(String regex,String repStr,String content)
{
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(content);
StringBuffer sb = new StringBuffer();
boolean result = m.find();
while(result){
m.appendReplacement(sb, repStr);
result = m.find();
}
m.appendTail(sb);
return sb.toString();
}
}
6、进制转换。这个就太简单了,以 2 和 10进制的互化为例子
public class Test7 {
/**
* @param java进制转换
*/
public static void main(String[] args) {
//like 2 -> 10
String source1 = "1101000101000110111";
int sum1 = 0,i= source1.length()-1;
for(;i>=0;i--){
sum1 += Integer.parseInt(source1.charAt(i)+"")*(java.lang.Math.pow(2, source1.length()-i-1)); //注意方向
}
System.out.println("2进制 :"+Integer.toBinaryString(sum1)+" 其10进制为:"+sum1);
//like 10 -> 2 相除求余法
int source2 = sum1;
StringBuffer sb = new StringBuffer("");
while(source2!=1){
sb.append(source2 % 2);
source2 = source2/2;
}
sb.append(1);
System.out.println("10进制:"+sum1+" 其2进制为:"+sb.reverse().toString());
}
}
7、输入字符串长度,字符串,计数m。
import java.util.ArrayList;
public class Test9 {
/**
* @param
* 输入字符串长度,字符串,计数m。从前往后计数,当数到m个元素时,m个元素出列,同时将该元素赋值给m,然后从下一个数计数循环,直到所有数字都出列,给定的数全部为大于0的数字。输出出队队列
*/
public static void main(String[] args) {
int len=4;
String str="3,1,2,4";
int m=7;
Test9 test9 = new Test9();
System.out.println(test9.getOutString(len, str, m));
}
public String getOutString(int len, String str, int m) {
int i=0,cur=0;
String []arr = str.split(",");
ArrayList<String> vt = new ArrayList<String>();
for(;i<len;i++) vt.add(arr[i]);
while(vt.size()!=0){
int size = vt.size();
int temp = ( m+cur-1 )% size;
cur = temp;
System.out.print("--"+vt.toString()+"--");
System.out.print(vt.get(temp)+",");
m = Integer.parseInt(vt.get(temp));
vt.remove(temp);
}
return "";
}
}
8、问题描述:
我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:
1、 长度13位;
2、 以86的国家码打头;
3、 手机号码的每一位都是数字。
请实现手机号码合法性判断的函数(注:考生无需关注手机号码的真实性,也就是说诸如86123123456789这样的手机号码,我们也认为是合法的),要求:
1) 如果手机号码合法,返回0;
2) 如果手机号码长度不合法,返回1
3) 如果手机号码中包含非数字的字符,返回2;
4) 如果手机号码不是以86打头的,返回3;
【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。
要求实现函数:
int s int verifyMsisdn(char* inMsisdn)
【输入】 char* inMsisdn,表示输入的手机号码字符串。
【输出】 无
【返回】 判断的结果,类型为int。
示例
输入: inMsisdn = “869123456789“
输出: 无
返回: 1
输入: inMsisdn = “8813912345678“
输出: 无
返回: 3
输入: inMsisdn = “8613912345678“
输出: 无
返回: 0
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test10 {
/**
* @param 手机号码标准格式为
* :国家码+手机号码,例如:8613912345678
*/
public static void main(String[] args) {
String inMsisdn = "8613912315678";
System.out.println(new Test10().verifyMsisdn(inMsisdn));
}
int verifyMsisdn(String str) {
Matcher mat = Pattern.compile("86\\d{11}$").matcher(str);
if (mat.find())
return 0;
else {
if (str.length() != 13) {
return 1;
} else {
Matcher mat1 = Pattern.compile("86\\S{11}$").matcher(str);
if (mat1.find())
return 2;
else{ //余下的情况就是:开头不是86
return 3;
}
}
}
}
}
另附网上的方法,利用了Character的静态函数isDigit和digit(int,int)
int verifyMsisdn(String str) {
char[] inchars = str.toCharArray();
if(inchars.length!=13) return 1;
for(int i=0;i<13;i++) {
if(!Character.isDigit(inchars[i])){
return 2;
}
}
if((Character.digit(inchars[0], 10)!=8 )||(Character.digit(inchars[1], 10)!=6) ) return 3;
else return 0;
}
8、
输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。
例如: 输入:3+8×2/9-2
输出:2
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class Test11 {
/**
* @param 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。
例如: 输入:3+8×2/9-2
输出:2
public int getMyRet(String str)
*/
public static void main(String[] args) {
Test11 test11 = new Test11();
System.out.println(test11.getMyRet("3+2-8*2/2-2")+"");
}
public int getMyRet(String str) {
List<String> vt = new ArrayList<String>();
for(int i=0;i<str.length();i++) vt.add(str.charAt(i)+"");
for(int m=0;m<vt.size();m++){
if(vt.get(m).equals("*")||vt.get(m).equals("/")){
if(vt.get(m).equals("*")) vt.add(m-1,(Integer.parseInt(vt.get(m-1))*Integer.parseInt(vt.get(m+1)))+"");
else vt.add(m-1,(Integer.parseInt(vt.get(m-1))/Integer.parseInt(vt.get(m+1)))+"");
vt.remove(m);
vt.remove(m);
vt.remove(m);
m --;
}
}
//经过这个处理以后,就不包含乘除了
for(int m=1;m<vt.size()&&m!=0;m++){
if(vt.get(m).equals("+")||vt.get(m).equals("-")){
if(vt.get(m).equals("+")) vt.add(m-1,(Integer.parseInt(vt.get(m-1))+Integer.parseInt(vt.get(m+1)))+"");
else vt.add(m-1,(Integer.parseInt(vt.get(m-1))-Integer.parseInt(vt.get(m+1)))+"");
vt.remove(m);
vt.remove(m);
vt.remove(m);
m --;
}
}
return Integer.parseInt(vt.get(0));
}
}
9、评委打分问题。
选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评委类别,judge_type[i] == 1,表示专家
评委,judge_type[i] == 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分 *
0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分 = 专家评委平均分,总分取整。函数最终返回选手得分。
public class Test13 {
/**
* @param 评委打分
*/
public static void main(String[] args) {
int score[] = {
34,53,65,75,64
};
int judge_type[] = {
1,1,1,2,2
};
Test13 test13 = new Test13();
System.out.println(test13.cal_score(score, judge_type, 5));
// System.out.println((int)(0.4*3));
}
public int cal_score(int score[], int judge_type[], int n){
int a =0,b=0,as=0,bs=0; //a:专家、b:大众
for(int i=0;i<judge_type.length;i++){
if(judge_type[i]==1) { a++; as+=score[i]; }
else if(judge_type[i]==2) { b++; bs+=score[i]; }
return ( b==0 )?(as):((int)(0.4*(bs/b)+(int)0.6*(as/a)));
}
return 0;
}
}
10、将一个字符串的元音字母复制到另一个字符串,并进行排序操作。输入:Abort!May Be Some Errors In Out System.输出:aeeeooAEIO
public class Test17 {
/**
* @param 将一个字符串的元音字母复制到另一个字符串,并进行排序操作 元音字母是a,e,i,o,u,A,E,I,O,U
*/
static String dest="";
public static void main(String[] args) {
Test17 test17 = new Test17();
String soure = "Abort!May Be Some Errors In Out System. ";
test17.sortVowel(soure);
System.out.println(dest);
}
public void sortVowel(String source){
for(int i=0;i<source.length();i++){
char ch = source.charAt(i);
if(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='A'||ch=='E'||ch=='I'||ch=='O'){
dest +=ch;
}
}
//对dest进行排序
StringBuffer big = new StringBuffer("");
StringBuffer small = new StringBuffer("");
for(int j=0;j<dest.length();j++){
char ch2 = dest.charAt(j);
if(ch2=='A'||ch2=='E'||ch2=='I'||ch2=='O'){
big.append(ch2);
}else small.append(ch2);
}
//对big和small进行冒泡排序
for(int m=0;m<big.length();m++)
for(int n=m+1;n<big.length();n++){
if(big.charAt(m)>big.charAt(n)){
char temp = big.charAt(m);
big.setCharAt(m,big.charAt(n));
big.setCharAt(n,temp);
}
}
for(int m=0;m<small.length();m++)
for(int n=m+1;n<small.length();n++){
if(small.charAt(m)>small.charAt(n)){
char temp = small.charAt(m);
small.setCharAt(m,small.charAt(n));
small.setCharAt(n,temp);
}
}
dest = small.toString()+big.toString();
}
}