华为机试题及参考答案
/*
* 程序实现目标:输入一个字符串,将其各个字符对应的ASCII值加5后,输出结果。
程序要求:该字符串只包含小写字母,若其值加5后的字符值大于'z',将其转换成从a开始的字符。
*/
public class Main001 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String str="afdsfdsxz";
char[] indata=str.toCharArray();
addAccii(indata);
}
public static void addAccii(char[] indata){
for(int i=0;i<indata.length;i++){
if((indata[i]+5)>122){
indata[i]= 'a';
}else{
indata[i]= (char)(indata[i]+5);
}
System.out.print(indata[i]);
}
}
}
/*
* 功能描述:判断一个字符串中是否只含有相同的子字符串(子串长度>=2)
输入:abab
返回:true
输入:abcd
返回:false
*/
public class Main002 {
static void main(String[] args) {
String str = "ertyertyabcdabcdsdf464132132146464165479lhkjhnkjgibkjbjljdslfsajdlasdf4asdf5a7e";
int count = 2;
List<String> maxLengthList = newArrayList<String>();
maxLengthList = checkString(str,count, maxLengthList);
System.out.println(maxLengthList);
StringBuilder sbBuilder = new StringBuilder();
if (maxLengthList.isEmpty()) {
System.out.println("无重复并且长度大于2的子串!");
} else {
int maxLength = maxLengthList.get(0).length();
sbBuilder.append(maxLengthList.get(0)).append(",");
for (int i = 1; i < maxLengthList.size(); i++) {
if (maxLengthList.get(i).length() == maxLength){
sbBuilder.append(maxLengthList.get(i)).append(",");
}
}
System.out.println("重复最长子串为:"
+sbBuilder.toString().substring(0,
sbBuilder.toString().length() - 1));
}
String str1 = "abab";
int startindex = 0;
int count2 = 2;
System.out.println(isHave(str.substring(0,count2), str1, startindex,
count));
}
public static List<String>checkString(String str, int count,
List<String> maxLengthList) {
if (count >str.length() / 2 + 1) {
return maxLengthList;
}
for (int i = 0; i <str.length() - count; i++) {
List<String> strList = new ArrayList<String>();
String regex = str.substring(i,i + count) + "+?";
Pattern pattern= Pattern.compile(regex);
Matcher matcher= pattern.matcher(str);
while (matcher.find()) {
strList.add(matcher.group());
}
if (strList.size()> 1
&& !maxLengthList.contains(str.substring(i, i + count))) {
maxLengthList.add(str.substring(i, i + count));
}
}
count++;
if (count >str.length()) {
return maxLengthList;
}
checkString(str,count, maxLengthList);
Collections.sort(maxLengthList,new Comparator<Object>() {
@Override
publicint compare(Object o1,Object o2) {
int length1 =o1.toString().length();
int length2 =o2.toString().length();
return length1 - length2< 0 ? 1 : (length1 - length2 == 0 ? o1
.toString().compareTo(o2.toString()) : -1);
}
}
);
return maxLengthList;
}
public static boolean isHave(Stringstr1, String str,int startindex,
int count) {
boolean isHave =false;
++startindex;
if (count >str.length() / 2 + 1) {
return isHave;
}
List<String>strList = new ArrayList<String>();
String regex = str1+ "+?";
Pattern pattern =Pattern.compile(regex);
Matcher matcher =pattern.matcher(str);
while (matcher.find()) {
strList.add(matcher.group(0));
}
if (strList.size()> 1) {
isHave = true;
} else if(!str.endsWith(str1)) {
int endIndex =startindex + count;
if (endIndex >str.length()) {
return isHave;
}
isHave = isHave(str.substring(startindex,endIndex), str,
startindex, count);
} else {
++count;
isHave = isHave(str.substring(0,count), str, startindex, count);
}
return isHave;
}
}
/*
* 3、手动输入一个存储整数的数组,要求输出数组里面的2个最大值。
实例:
输入:1,2,5,9,84,3,2
输出:84,9
* */
public class Main003 {
public static void main(String[] args) {
Main003 test = new Main003();
int[] arr = {1,45,98,6,4};
test.getMaxValue(arr);
}
public void getMaxValue(int[] arr){
int temp=0;
if(arr.length<1){
System.out.println("数组元素个数至少为2");
}
else{
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[i]>arr[i+1]){
temp = arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
System.out.print(arr[arr.length-1]+"、"+arr[arr.length-2]);
}
}
}
/*
* 题目描述:
有这样一类数字,他们顺着看和倒着看是相同的数,例如:121,656,2332等,
这样的数字就称为:回文数字。编写一个函数,判断某数字是否是回文数字。
要求实现方法:
public String isPalindrome(String strIn);
【输入】strIn:整数,以字符串表示;
【返回】true:是回文数字;
false: 不是回文数字;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例:
输入:strIn = “121”
返回:”true
*/
public class Main004 {
public static void main(String[] args) {
String inputValue = JOptionPane.showInputDialog("请输入一个整数");
long inputValueLong =Long.parseLong(inputValue);
long temp =inputValueLong;
long reverseLong = 0L;
while(inputValueLong !=0)
{
reverseLong =reverseLong*10+inputValueLong%10;
inputValueLong =inputValueLong/10;
}
if(reverseLong ==temp)
System.out.println("你输入的是回文数");
else
System.out.println("你输入的不是回文数");
}
}
/*
* 6.手动输入一个字符串,仅限小写字母,统计并输出每个字符在字符串中出现的次数,并输出。
* 提示(可以用Map)
实例:
输入:aaabbbccc
输出: a 3
b 3
c 3
*/
public class Main006 {
public static void main(String[] args) {
statTimes("dfsdfgerfgtewthgat");
}
static void statTimes(Stringparam)
{
if(param ==null) return;
//hashset保存不重复的值因此
HashSet<Character>hSet = new HashSet<Character>();
char[] cs =param.toCharArray();
for (char c : cs)
hSet.add(c);
ArrayList<Character>list = new ArrayList<Character>(hSet);
int n =hSet.size(); //有多少种字符
int[] times =new int[n]; //保存每种字符的出现次数
for (char c : cs) //进行统计
times[list.indexOf(c)]++;
for (int i = 0; i < n;i++)
System.out.println("字符 " + list.get(i) +"出现了:" + times[i] +"次。");
//打印结果
}
}
/*
* 要求实现方法public String addTwoBigNumber(String s1,string s2)
大数相加,注意处理异常
*/
public class Main007 {
String result,s1,s2;
int s1Len, s2Len;
public Main007(Stringstr1,String str2)
{
s1=str1;
s2=str2;
}
/**
* @param args
*/
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("input thefirst number:");
String s1=sc.nextLine();
System.out.println("input thesecond number:");
String s2=sc.nextLine();
sc.close();
Main007 a=new Main007(s1,s2);
String res=a.add();
System.out.println("my addresult is: "+res);
}
public boolean check()//输入异常检查
{
for(int i=0;i<s1Len;i++)
{
if(s1.charAt(i)>'9'||s1.charAt(i)<'0')
{
System.out.println("first inputis not a number");
return false;
}
}
for(int i=0;i<s2Len;i++)
{
if(s2.charAt(i)>'9'||s2.charAt(i)<'0')
{
System.out.println("secondinput is not a number");
return false;
}
}
return true;
}
public String add()
{
result="";
s1Len=s1.length();
s2Len=s2.length();
if(check())
{
if(s1Len<s2Len)//make s1 longerthan s2
{
String tempStr=s2;
s2=this.s1;
s1=tempStr;
int tempNum=s2Len;
s2Len=s1Len;
s1Len=tempNum;
}
int flag=0;//if there is acarry-over from the behind number
int deltaLen=s1Len-s2Len;
int sum;
for(int i=s1Len-1; i>=0; i--)
{
if(i-deltaLen>=0)
sum=(s1.charAt(i)-'0')+(s2.charAt(i-deltaLen)-'0')+flag;
else
sum=(s1.charAt(i)-'0')+flag;
flag=0;
if(sum>9)//if there is acarry-over
{
sum-=10;
flag=1;
}
result=sum+result;
}
if(flag==1)//if the highestbit has a carry-over
{
result="1"+result;
flag=0;
}
}
returnresult;
}
}
/*
* 8、比较二维数组列最小值,组成一个新数组返回。(实现核心算法,不需要使用IO)
输入:{{5,6,1,16},{7,3,9}}
输出:intArrs ={1,3}
*/
public class Main008 {
public static void main(String args[]) {
// 写测试方法
int[][] a = { { 5, 6, 1, 16 }, { 7, 3, 9 }, { 2, 4, 56 } };
int[] ss =getColMin(a);
for (int i = 0; i < ss.length; i++) {
System.out.print(ss[i] +"");
}
}
public static int[] getColMin(int a[][]) {
int[] res =new int[a.length];
for (int i = 0; i < a.length; i++) {
int[] s = a[i];
Arrays.sort(s);
res[i] = s[0];
}
return res;
}
}
/*
* 输入:aaa,cat tiger.123dd
输出: tiger
功能描述:键盘输入一句话
输出一句话中最长的单词,如果最长的出现多次,返回第一个。
这句话只包含数字字母和标点。
*/
public class Main009 {
private static String langWord(String inString) {
int sum=0;
String[] strings=inString.split("[ ,.1-9]");
ArrayList<String> strings2=new ArrayList<String>();
for (int i = 0; i < strings.length; i++) {
if (sum<strings[i].length()) {
sum=strings[i].length();
strings2.add(strings[i]);
}
}
return strings2.get(strings2.size()-1);
}
public static void main(String[] args) {
System.out.println("请输入字符串:");
Scanner scanner=new Scanner(System.in);
String data=scanner.nextLine();
System.out.println(langWord(data));
}
}
/**
* 10、功能描述:将字符串中的字母全部替换成字母的下一个字母,要是最后一位是z或Z则替换为a或A。
* 输入:aBxyZ
* 输出:bCyzA
*/
public class Main010 {
public static void main(String[] args) {
String data = "aBxyZ";
System.out.println(new Main010().nextString(data));
}
public String nextString(String data) {
char[] arr = data.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (arr[i] >='a' && arr[i] <= 'z' || arr[i] >='A'
&& arr[i] <= 'Z') {
if (arr[i] =='z' || arr[i] == 'Z') {
arr[i] = (char) (arr[i] - 25);
} else if ((arr[i] >= 'a' && arr[i] <'z')
|| (arr[i] >= 'A' && arr[i] <'Z')) {
arr[i] = (char) (arr[i] + 1);
}
}
}
String res = String.valueOf(arr);
return res;
}
}
/**
*2、求一个整形数组中元素的平均值,并统计其中大于和小于此平均值的元素的个数
要求:输入:整形数组中的元素个数及各个元素
输出:整型数组中元素的平均值,大于和小于此平均值的元素个数
*/
public class Main011 {
public static void main(String[] args) {
int[] arr ={1,100};
new Main011().getavage(arr, 2);
}
public void getavage(int[] arr,int num){
if(num==0){
System.out.println("数组为空");
}else{
double avage = 0.0;
int sum = 0;
int count1=0;
int count2=0;
for(int i=0;i<arr.length;i++){
sum += arr[i];
}
avage = (double)sum/num;
for(int j =0;j<num;j++){
if(arr[j]>avage){
count1++;
}else{
count2++;
}
}
System.out.println("平均值:"+avage);
System.out.println("大于平均值的元素个数:"+count1);
System.out.println("小于平均值的元素个数:"+count2);
}
}
}
/*
* 功能描述:已知:yier sansi wu liu qi ba jiu 分别对应123456789,
对一段只含有这几种字符串的字符串进行转换,如:
输入:yiersansan
输出:1233
*/
public class Main012 {
public static void main(String[] args) {
Replace("yiersansan","yi","1");
System.out.println(Replace("yiersansan","yi","1"));
}
public static String Replace(String source,String oldString,StringnewString){
if (source ==null) {
return null;
}
StringBuffer output = new StringBuffer();
int lengOfsource = source.length();
int lengOfold = oldString.length();
int posStart;
int pos;
for (posStart = 0;(pos =source.indexOf(oldString, posStart))>=0;posStart=pos+lengOfold){
output.append(source.substring(posStart,pos));
output.append(newString);
}
if (posStart < lengOfsource) {
output.append(source.substring(posStart));
}
return output.toString();
}
}
/*
* 功能描述:删除字符串中字符个数最少的字符,最少字符串有多个,最少的要全部删除
然后返回该子字符串。
输入:asdasdas
输出:asasas
*/
public class Main013 {
/**
* 一、创建HashMap,然后统计字符串每个字母的次数,将字母作为HashMap的键,
* 字母出现的次数作为值
二、得到最小的值,然后得到对应的字母
三、String.split("字母"),得到不包含该字符的字符串数据
四、用StringBuffer将这些字符串连接起来,最终得到需要的字符串
* @param args
*/
public static void main(String args[]){
String str;
int flg[] =new int[200];//只考虑小写或者大写的字母
int min=5;
char c='c';
Scanner s = new Scanner(System.in);
List<Object> v = new ArrayList<Object>();
str=s.next();
for(int i=0;i<str.length();i++){
char ch =str.charAt(i);
min=((++flg[ch]<min) ? flg[ch]:min);
if(min<=flg[ch]){
c=ch;
}
}
for(int i=0;i<str.length();i++){
char ch=str.charAt(i);
if(ch==c){
}else{
v.add(ch);
}
}
String ss=v.toString();
System.out.println(ss);
}
}
/*
* 功能描述:找出一个int[]中满足 2^n的数字,然后组成的新的数组
输入:{4,3,8}
输出:{4,8}
*/
public class Main014 {
/**
* @param args
*/
public static void main(String[] args) {
int[] data1={256,2,4,3,1,15,16,28,44,32,64};
int[] data2=nestString(data1);
System.out.println(Arrays.toString(data2));
}
private static int[] nestString(int[] data) {
List<Integer> list=new ArrayList<Integer>();
for (int i = 0; i < data.length; i++) {
int temp = data[i];
while (temp != 2) {
if (temp %2== 0) {
temp /=2;
}else {
break;
}
}
if (temp==2) {
list.add(data[i]);
}
}
int [] data2=newint[list.size()];
for (int i = 0; i < list.size(); i++) {
data2[i]=list.get(i);
}
return data2;
}
}
/*
*
功能描述:共data1个人,围成一圈,然后标号,从1-data1。
然后从data2号开始从1报数,报3的出列,求出列序列。
返回一个数组
如:
输入:3,2
输出:1,2,3
要求实现方法:
/*
* data1:人数
* data2 : 起始位置
*
public int[] circleOut(int data1,int data2)
{
int outNum = 3;
//TODO
return null;
}
*/
public class Main015 {
/**
* 约瑟夫环问题
*/
private static int count=0;//定义数到的人的编号count
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入人数:");
int n=scanner.nextInt();
System.out.println("请输入出局号码:");
int m=scanner.nextInt();
long s1 = System.currentTimeMillis();
sortP(n,m);
long s2 = System.currentTimeMillis();
System.out.println("所用总时间:"+(s2-s1));
}
private static void sortP(int n,int m) {
if(n==1){//特殊情况
System.out.println(n);;
}else {
f1(n, m);
}
}
//当人数大于1时执行此函数
private static void f1(int n,int m) {
int[] arr =new int[n];
for(int j=0;j<n;j++){//循环执行n(总人数)次,排出出局次序
for(int i = 0;i<m;i++){
count++;//每数一人count加1
measure(j, arr);//判断count是否已在数组中
if(count>n){
count=1;//若count大于总人数将其置1
measure(j, arr);//继续进行判断
}
}
arr[j]=count;//将出局人序号保存至数组
}
System.out.println("出局顺序为:"+Arrays.toString(arr));
System.out.println("最后出局人为:"+arr[n-1]);
}
/*用于判断count是否已存在,若存在count加1继续判断
* 此函数用双重循环,若为单重不能保证count在数组唯一
* */
private static void measure(int j,int[] arr) {
for(int s = 0;s<j;s++){
for(int w=0;w<j;w++){
if(count==arr[w])count++;
}
}
}
}
/*
* 功能描述:统计一个数字转为二进制后,0和1的个数,组成数组返回
输入:6
输出:{1,2}
*/
public class Main016 {
public static void main(String[] args) {
test();
test2();
}
/**
* 统计二进制数中0的个数[除法操作]
*/
public static void test() {
int d = 6;
int count = 0;
while (d != 0) {
if (d % 2 == 0) {
count++;
}
d /= 2;
}
System.out.println(count);
}
/**
* 统计二进制数中0的个数[与操作]
*/
public static void test1() {
int d = 6;
int count = 0;
while (d != 0) {
if ((d & 0x01) != 1) {
count++;
}
d >>= 1;
}
System.out.println(count);
}
/**
* 统计二进制数中1的个数的方法。时间复杂度只与1的个数有关。
*/
public static void test2() {
int n = 6;
int count = 0;
while (n != 0) {
count++;
n = n & (n - 1);
}
System.out.println(count);
}
}
/*
* 功能描述:对一个二进制数的每位进行0和1反转,求翻转后的二进制所对应的十进制
输入:110
输出:5
*/
public class Main017 {
public static void main(String[] args) {
test();
}
/**
* 反转二进制数并输出结果的十进制值是多少
*/
public static void test() {
int d = 110;
int len = Integer.toBinaryString(d).length();
int b[] =new int[len];
int index = 0;
while (d != 0) {
b[index++] = d & 0x01;
d >>= 1;
}
int c = 0;
d = 0;
while (c < len) {
d = d * 2 + b[c];
c++;
}
System.out.println(d);
}
}
/*
* 功能描述:判断一个字符串中的"( )"是否配对
输入:if(a.equals(a))
输出:true
*/
public class Main018 {
public static void main(String[] args) {
System.out.println(isStack("{}{}{{{}sss}}"));
// System.out.println(isStack("{"));
// System.out.println(isStack(""));
// System.out.println(isStack("{{fdsfs}}{}"));
System.out.println(isStack("{}}"));
}
private static boolean isStack(Stringstring) {
Stack<Character>stackz = new Stack<Character>();
for (int i = 0; i <string.length(); i++) {
if (string.charAt(i)=='{') {
stackz.push(string.charAt(i));
} else if (string.charAt(i)== '}') {
if (stackz.isEmpty()){
return false;
} else {
stackz.pop();
}
}
}
if (stackz.isEmpty()){
return true;
} else {
return false;
}
}
}
/*
* 功能描述:查找一个字符串的子字符串集
输入:abab
输出:a bab ba aba bab
*/
public class Main019 {
/**
* @param args
*/
public static void main(String[] args) {
perenum("abcdef",3);
}
public static ArrayList<String> perenum(String str,int m)
{
ArrayList<String> strArr = new ArrayList<String>();
Find(strArr,"",str);
return null;
}
public static String Find(ArrayList<String> strArr,StringstrBef,String str)
{
for(int i=0 ;i<str.length();++i)
{
String allstr = strBef+str.charAt(i);
String str1=str.substring(i+1);
Find(strArr,allstr,str1);
strArr.add(allstr);
System.out.print(allstr+"\n");
}
return str;
}
}
/*
* 功能描述:数组的循环移位,
输入:{a,b,c,},2
输出:{b,c,a}
*/
public class Main020 {
/**
* @param args
*/
public static void main(String[] args) {
int[] n ={7,4,8,9,1,5};
char[]n2={'a','b','c'};
for(int i=0;i<n.length;i++){
outNum(n);
System.out.println();
moveNum(n);
}
}
private static void moveNum(int[] n) {//数组元素移位
int temp = n[n.length-1];
for(int i=n.length-1;i>0;i--){
n[i] = n[i-1];
}
n[0] = temp;
}
private static void outNum(int[] n) {//输出数组
for(int i=0;i<n.length;i++){
System.out.print(n[i]);
}
}
}
/*
* 程序实现目标:输入一个字符,将字符转换为小写,将其对应的ASCII值加5后,输出结果。
程序要求:若其值加5后的字符值大于'z',将其转换成从a开始的字符。
输入:‘A’
输出:‘f’
*/
public class Main021 {
public static void main(String[] args) {
Main021 test = new Main021();
String data = "q";
String regex = "^[a-z]*$";
if (data.matches(regex)) {
System.out.println(test.getString(data));
} else {
System.out.println("输入的字符串不合法");
}
}
public char[] getString(String data) {
char[] arr = data.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (arr[i] + 5 >'z') {
arr[i] = (char) (arr[i] - 21);
} else {
arr[i] = (char) (arr[i] + 5);
}
}
return arr;
}
}
/*
* 要求:将一个二维数组进行逆序,逆序后所有的元素行列不定,进行随机排列
*/
public class Main022 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generatedmethod stub
}
}
/*
* 根据输入m数据,找出str的m个字符的所有字符串
例如"abc"m=2
"ab" "ac""bc"
"abcd" m=3
"abc" "acd""bcd" "abd"
*/
public class Main023 {
public static void main(String[] args) {
perenum("abcdef",3);
}
public static ArrayList<String> perenum(String str,int m)
{
ArrayList<String> strArr = new ArrayList<String>();
Find(strArr,"",str,m);
return null;
}
public static String Find(ArrayList<String> strArr,StringstrBef,String str,int m)
{
for(int i=0 ;i<str.length();++i)
{
String allstr = strBef+str.charAt(i);
String str1=str.substring(i+1);
Find(strArr,allstr,str1,m);
strArr.add(allstr);
if (allstr.length()==m) {
System.out.print(allstr+"\n");
}
}
return str;
}
}
/*
* 分解质因数
eg:输入 28
输出 2*2*7
*/
public class Main024 {
static boolean is_odd(int n)
{
if(n==2||n==3)return true;
if(n%2==0)return false;
int i;
for(i=3;i<=n/2;i+=2)
if(n%i==0)return false;
return true;
}
public static void main(String[]args)
{
try { Scanner in=new Scanner(System.in);
System.out.println("输入数值");
int n=in.nextInt();
int i;
System.out.print(n+"=");
for(i=2;i<=n;i++)
{
if(!is_odd(i))continue;
if(n%i==0)
{
while(true)
{
System.out.print(i);
n/=i;
if(n!=1) System.out.print("*");
if(n%i!=0)break;
}
}
}
System.out.println();
} catch (Exception e) {
System.out.println("输入的不是整数!");
//e.printStackTrace();
System.exit(0);
}
}
}
/*
* n个长度的字符串中取m个长度的组合
*/
public class Main025 {
/**
* @param args
*/
public static void main(String[] args) {
perenum("abcdef",3);
}
public static ArrayList<String> perenum(String str,int m)
{
ArrayList<String> strArr = new ArrayList<String>();
Find(strArr,"",str,m);
return null;
}
public static String Find(ArrayList<String> strArr,StringstrBef,String str,int m)
{
for(int i=0 ;i<str.length();++i)
{
String allstr = strBef+str.charAt(i);
String str1=str.substring(i+1);
Find(strArr,allstr,str1,m);
strArr.add(allstr);
if (allstr.length()==m) {
System.out.print(allstr+"\n");
}
}
return str;
}
}
/*
* 二维数组转置
例:1 2 3
4 5 6
转置
1 4
2 5
3 6
*/
public class Main026 {
/**
* @param args
*/
public static void main(String[] args) {
int[][] aa={{1,2,3},{4,5,6}};
int[][] bb=turn(aa);
for(int[] ii:bb){
for(int i:ii){
System.out.print(i+" ");
}
System.out.println();
}
}
public static int[][] turn(int[][] aa) {
int lencol=aa[0].length;
int lenrow=aa.length;
int [][] rr=newint[lencol][lenrow];
for (int i = 0; i < lencol; i++) {
for (int j = 0; j < lenrow; j++) {
rr[i][j]=aa[j][i];
}
}
return rr;
}
}
}
/*
* 功能描述:输入字符串,将该字符串中数字放到非数字的后面,并保持原有顺序不变。
例如:h3a2p0p1y----------happy3201
*/
public class Main027 {
/**
* @param args
*/
public static void main(String[] args) {
sof("h3a2p0p1y");
}
public static String sof(StringinString) {
char[] t=inString.toCharArray();
ArrayList<String> list1=new ArrayList<String>();
ArrayList<String> list2=new ArrayList<String>();
for (int i = 0; i < t.length; i++) {
if (t[i]>=48 && t[i]<=57) {
list1.add(t[i]+"");
}else if((t[i]>=97&&t[i]<=122)||(t[i]>=65&&t[i]<=91)) {
list2.add(t[i]+"");
}
}
String string1="";
for (Iterator iterator = list2.iterator();iterator.hasNext();) {
string1=string1+(String)iterator.next();
}
String string2="";
for (Iterator iterator = list1.iterator();iterator.hasNext();) {
string2=string2+(String)iterator.next();
}
System.out.println(string1+string2);
return string1+string2;
}
}
/*
* 有一个字符串,请将其中的数字按大小排序
要求:用最简单的方式实现,考虑性能
输入: "32, 43, 76, 4, 54, 2, 93, 1"
*/
public class Main028 {
/**
* @param args
*/
public static void main(String[]args){
String str=new String("13a64bc52");
char[]strArray=str.toCharArray();
List<Character>a=new ArrayList<Character>();
List<Integer> b=newArrayList<Integer>();
for(int i=0;i<strArray.length;i++)
{
if(strArray[i]<='9'&&strArray[i]>='0')
a.add((Character)strArray[i]);
else
b.add((Integer)i);
}
int [] integerArray=newint[a.size()];
for(inti=0;i<a.size();i++)
integerArray[i]=Character.digit((char)a.get(i), 10);
integerArray=bubbingSort(integerArray);
int [] rs=newint[str.length()];
int count=0;
for(int i=0;i<rs.length;i++)
{
for(Iterator<Integer>it=b.iterator();it.hasNext();)
{
int x=it.next();
rs[x]=strArray[x];
}
if(rs[i]!=0)
continue;
else
{
rs[i]=integerArray[count];
count++;
}
}
for(int i=0;i<rs.length;i++)
{
if(rs[i]>9||rs[i]<0)
System.out.print((char)rs[i]);
else
System.out.print(rs[i]);
}
}
public static int[] bubbingSort(int[] a){
int swap=0;
for(int i=a.length-1;i>=0;i--)
for(int j=0;j<i;j++)
{
if(a[i]<a[j])
{
swap=a[i];
a[i]=a[j];
a[j]=swap;
}
}
return a;
}}
/*
* 从一个字符串中返回给定单词的位置,如果有多个,则返回第一次出现的位置,如果没有,则返回0
例子:"hello world","hello"
结果:1
*/
public class Main029 {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(theLocation("ahello world","hello"));
}
public static int theLocation(String str1,String str2) {
int sum=0;
if (str1.contains(str2)) {
String [] arrray1=str1.split(" ");
for (int i = 0; i < arrray1.length; i++) {
if (arrray1[i].trim().equals("")) {
++sum;
}
if (str2.equals(arrray1[i])) {
return i-sum+1;
}
System.out.println(arrray1[i]);
}
}
return 0;
}
}
/*
* 输入是一个表达式,比如说是1*2-3+4*5,要求计算出这个表达式的值。
思路:不瞻前,只顾后。
在计算的时候,如果当前运算符是乘除法,则直接计算出来,再考虑后续的。
如果当前的操作符不是乘除,则“顾后”,查看后面的操作符是不是乘除法,
如果是乘除法,则计算乘除法,否则把当前的加减法计算出来,再计算后续的。
*/
public class Main030 {
public static void main(String ss[]) {
String s = "1+2*3*4+5";
System.out.println(calculate(s.toCharArray()));
}
private static double calculate(char[] expr) {
double c1 = Double.parseDouble(expr[0]+"");
double c2 = Double.parseDouble(expr[2]+"");
int index = 3;
char op = expr[1];
while (index < expr.length) {
if (expr[index] =='*' || expr[index] == '/') {
// 如果是乘除法,则先计算
c2 = cal(c2, Double.parseDouble(expr[index+ 1] +""),
expr[index]);
} else {
// 如果不是乘除法,则计算出来结果
c1 = cal(c1, c2,op);
op = expr[index];
c2 = Double.parseDouble(expr[index+ 1] +"");
}
index += 2;
}
returncal(c1, c2, op);
}
private static double cal(double a,double b, char op) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
}
return -1;
}
}
/*
* 最长公共子串和最长公共子序列
*/
public class Main31 {
public static void main(String ss[]) {
get("abcdefg","hbcsefgk");
}
private static void get(String s1, String s2) {
int lcslen = 0;
int pos_x = -1, pos_y = -1;
// 初始化二维数组
int flag[][] =new int[s1.length() + 1][s2.length() + 1];
for (int i = 0; i < s1.length() + 1; i++) {
flag[i][0] = 0;
}
for (int i = 0; i < s2.length() + 1; i++) {
flag[0][i] = 0;
}
for (int i = 1; i <= s1.length(); i++) {
for (int j = 1; j <= s2.length(); j++) {
if (s1.charAt(i - 1) == s2.charAt(j - 1)){
flag[i][j] = flag[i - 1][j- 1] + 1;
if (flag[i][j] > lcslen) {
lcslen =flag[i][j];
pos_x = i;// 记录下最大长度在二维数组中的位置
pos_y = j;
}
} else {
flag[i][j] = 0;
}
}
}
// 方便观察,输出二维矩阵
for (int i = 0; i < s1.length() + 1; i++) {
for (int j = 0; j < s2.length() + 1; j++) {
System.out.print(flag[i][j]);
}
System.out.println();
}
// 输出最长子串
StringBuilder sb = newStringBuilder();
while (flag[pos_x][pos_y] != 0) {
sb.append(s1.charAt(pos_x -1));
pos_x--;
pos_y--;
}
System.out.println(sb.toString());
}
}
华为机试题及参考答案相关推荐
- 2020华为校招面试机试题与参考答案解析
1.数字处理 题目描述:给出一个不多于5位的整数,进行反序处理,要求 (1)求出它是几位数 (2)分别输出每一个数字(空格隔开) (3)按逆序输出各位数字(仅数字间以空格间隔,负号与数字之间不需要间隔 ...
- 【牛客网】华为机试题(00、C++版本)
华为机试题,本来以为对一些基础的程序还是有点信心的:不过不练不知道,一练吓一跳.平时虽然也都码程序,但是一到机试题就各种乱七八的不适应.还是要加强一下练习. 1.字符串最后一个单词的长度 题目描述:计 ...
- 牛客网华为机试题(JavaScript)
最近在牛客网刷华为机试题,遇到了很多坑,记录: 每一道题目都经过自己实践验证 华为机试题 牛客网在javascript V8引擎下处理输入输出如下: 利用了readline()接收输入的每一行,多行处 ...
- 2009年计算机统考考研试题及参考答案
2009年计算机统考考研试题及参考答案 2009年计算机统考考研试题及参考答案 1 2009年计算机统考考研试题 1 2009年计算机统考试题参考答案 9 2009年计算机统考考研试题及参考答案 20 ...
- 计算机维修工试题及答案,计算机维修工初级工试题和参考答案
<计算机维修工初级工试题和参考答案>由会员分享,可在线阅读,更多相关<计算机维修工初级工试题和参考答案(7页珍藏版)>请在人人文库网上搜索. 1.计算机维修工初级工试题和参考答 ...
- 一般而言计算机软件是指(,2012年计算机一级考试模拟试题及参考答案(20)
2012年计算机一级考试模拟试题及参考答案(20) 分类:计算机等级 | 更新时间:2016-07-08| 来源:转载 [856]要将在Windows的其他软件环境中制作的图片复制到当前WORD文档中 ...
- 广播大学计算机考试,中央广播电视大学——学度第一学期期末考试计算机基础试题及参考答案...
<中央广播电视大学--学度第一学期期末考试计算机基础试题及参考答案>由会员分享,可在线阅读,更多相关<中央广播电视大学--学度第一学期期末考试计算机基础试题及参考答案(3页珍藏版)& ...
- 计算机软件考试预测,2020年计算机软件水平考试信息技术处理员预测试题及参考答案...
2020年计算机软件水平考试备考正在进行中,为了方便考生及时有效的备考,那么,小编为您精心整理了2020计算机软件水平考试<信息技术处理员>预测试题及参考答案,欢迎大家的关注.如想获取更多 ...
- 大学计算机基础实验指导试题,(大学计算机基础实验指导)模拟试题(二)参考答案...
(大学计算机基础实验指导)模拟试题(二)参考答案 (非计算机专业A卷) 一.填空题(共20分,每空1分) 1.电子管2.分时系统.实时系统3..txt 4.主码 5.实体.参照.用户定义6.同轴电缆. ...
最新文章
- 程序员们都必须知道的8种通用数据结构
- C语言过河问题主函数,c,c++_C语言踩石头过河问题,用DFS搜索递归了17万次但是没报错,请问是什么原因?,c,c++,算法 - phpStudy...
- 能力素质模型咨询工具(Part 2)
- 博士申请 | 香港科技大学谢知遥教授实验组招收机器学习全奖博士生
- SqlServer中的数据类型UniqueIdentifier
- 会话,授权,认证概念解析
- spark学习-33-Spark的RPC通信源码分析
- JavaScript运行机制:event-loop
- 怎么用Excel来批量生成SQL语句
- conda常用命令和基础知识整理
- 地统计学插值 | IDW(反距离)和Kriging(克里金)
- 服务器虚拟化思维导图,虚拟语气思维导图解析.ppt
- 大数据时代,个人信息安全由谁来保护?
- 待办事项桌面插件,办公族的桌面帮手
- android rfid开发实例,Android NFC读卡 高频卡 RFID
- windows云服务器价格_windows云服务器安装(微软云服务器价格)
- 市场规模一年猛增24% 这个靠“打印”出来的市场正在韩国崛起
- 2016计算机论文参考文献,2016大学毕业设计计算机软件论文摘要和结论参考文献俱全.doc...
- 2017年腾讯移动客户端开发岗位电话面试
- ant在linux下的配置
热门文章
- C++多线程:condition_variable
- 斯德哥尔摩的照片五:大教堂
- 解决virtualbox共享文件夹没有访问权限的问题
- flask SSTI漏洞
- “网站”已死,无人关心
- 朱老师核心课程之串口实验烧录
- 【路径规划】基于果蝇优化算法实现机器人路径规划matlab源码
- SpringCloud使用Hystrix的Turbine时,EurekaClient和NacosClient冲突问题
- 课程作业1-数据预处理以及 python对函数求导
- js中style,currentStyle和getComputedStyle的区别以及获取css操作方法