以下华为上机题目都是网上整理得到的,代码都是自己调试过的,由于网上java答案较少,欢迎大家批评指正,也希望对准备华为上机的童鞋们有一点点帮助。在练习的过程中成长,加油!~~
第1题:输入字符串长度len1,字符串s1,字符串长度len2,字符串s2。从后向前比较,以最短字符串为标准, 输出不同的元素的个数。
例如: 输入:s1="1,3,5" len1=3 s2="2,4,1,7,5" len2=5
输出:1
package com.sheepmu.text;
/**
* 输入字符串长度len1,字符串s1,字符串长度len2,字符串s2。从后向前比较,以最短字符串为标准,输出不同的元素的个数。 例如: 输入:s1="1,3,5" len1=3 s2="2,4,1,7,5" len2=5
输出:1
函数原型 public int getDiffNum(int len1, String s1, int len2, String s2)
* @author sheepmu
*
*/
public class HWText {
public static void main(String[] args){
String s1="1,3,5";
int len1=3;
String s2="2,4,1,7,5";
int len2=5;
int diffNum= getDiffNum(s1,len1,s2,len2);
System.out.println("不同的数目:"+diffNum);
}
public static int getDiffNum(String s1,int len1,String s2,int len2){
String[] str1=s1.split(",");
String[] str2=s2.split(",");
int len=len1>len2? len2:len1;
int count=0;
for(int i=0;i<len;i++){
if(!str1[len1-1-i].equals(str2[len2-1-i]))
count++;
}
return count;
}
}
第2题:输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。
例如: 输入:3+8×2/9-2
输出:2
package com.sheepmu.text;
import java.util.ArrayList;
import java.util.List;
/****
*输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。
例如: 输入:3+8×2/9-2
输出:2
函数原型 . public int getMyRet(String str)
* @author sheepmu
*
*/
public class HWText {
public static void main(String[] args){
String s="3+8×2/9-2 ";
int result=getMyRet(s);
System.out.println("最后结果:"+result);
}
public static int getMyRet(String s1 ){
int len=s1.length();
List<String> list=new ArrayList<String>();
for(int i=0;i<len;i++)
list.add(s1.charAt(i)+"");//!!!!!
System.out.println("list--->"+ list);//list--->[3, +, 8, ×, 2, /, 9, -, 2, ]
for(int j=0;j<list.size();j++){
if(list.get(j).equals("×")){
int ji=Integer.parseInt(list.get(j-1))*Integer.parseInt(list.get(j+1));
list.add(j-1,ji+"");//把ji插入到原来x的前一位,原来的后移。从8开始往后移
list.remove(j);//删除8;remove是删除当前位置后后面的前移;故x到了j这个下标位置。
list.remove(j);//删除x
list.remove(j);//删除9
System.out.println("list--x后->"+ list);//list--x后->[3, +, 16, /, 9, -, 2, ]
j--;//相当于这次循环木有跳动下一个下标,因为马上要对ji参与运算,而不是跳过
}
else if(list.get(j).equals("/")){
int shang=Integer.parseInt(list.get(j-1))/Integer.parseInt(list.get(j+1));
list.add(j-1,shang+"");
list.remove(j);
list.remove(j);
list.remove(j);
System.out.println("list--/后->"+ list);//list--/后->[3, +, 1, -, 2, ]
j--;
}
}
for(int k=0;k<list.size();k++){//这个时候是新的size
if(list.get(k).equals("+")){
int he=Integer.parseInt(list.get(k-1))+Integer.parseInt(list.get(k+1));
list.add(k-1,he+"");
list.remove(k);
list.remove(k);
list.remove(k);
System.out.println("list--+后->"+ list); //list--+后->[4, -, 2, ]
k--;
}
if(list.get(k).equals("-")){
int cha=Integer.parseInt(list.get(k-1))-Integer.parseInt(list.get(k+1));
list.add(k-1,cha+"");
list.remove(k);
list.remove(k);
list.remove(k);
System.out.println("list-- -后->"+ list); //list-- -后->[2, ]
k--;
}
}
int sum=Integer.parseInt(list.get(0));
return sum;
}
}
第3题:找出字符串中出现次数最多的字母和出现的次数
package com.sheepmu.text;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/****
* 找出字符串中出现次数最多的字母和出现的次数
* @author SheepMu
*/
public class HWText {
public static void main(String[] args){
String s1="sheepmusheepmummmm";
List<String> list=new ArrayList<String>();
for(int i=0;i<s1.length();i++)
list.add(s1.charAt(i)+"");
System.out.println("排序前的list--->"+list);// 排序前的list--->[s, h, e, e, p, m, u, s, h, e, e, p, m, u, m, m, m, m]
Collections.sort(list);
System.out.println("排序后的list--->"+list);// 排序后的list--->[e, e, e, e, h, h, m, m, m, m, m, m, p, p, s, s, u, u]
int[] count=new int[list.size()];
for(int i=0;i<count.length;i++)
count[i]=1;
System.out.println("初始定义每个字母出现的次数count--->"+Arrays.toString(count)); //list可以直接打印出来;但数组不行!打印数组的方法!!不然会[I@4a9a1ac
for(int j=0;j<list.size();j++)
for(int k=j+1;k<list.size();k++)
if(list.get(j).equals(list.get(k))){
count[j]++;
list.remove(k);
k--;
}
System.out.println("循环后的list--->"+list); //循环后的list--->[e, h, m, p, s, u]
System.out.println("list变化后每个字母出现的次数count--->"+Arrays.toString(count)); //因为数组长度这儿没有变化,所以后面还是保留了原本为每个字母定义的数量1
int maxTimes=count[0];//比较数组里面的最大值!
String maxStr=list.get(0);
for(int i=0;i<list.size();i++){
if(maxTimes<count[i]){
maxTimes=count[i];
maxStr=list.get(i);
}
}
System.out.println("出现次数最多的字母:"+maxStr+"出现次数:"+maxTimes);
}
}
方法二:
package com.sheepmu.text;
import java.util.ArrayList;
import java.util.List;
/*
* @author sheepmu
*/
public class HWCompetition {
public static void main(String[] args) {
String s1="sheepmusheepmummmm";
getStr(s1 ) ;
}
public static void getStr(String s1 ){
char[] cs=s1.toCharArray();
List<Character> list=new ArrayList<Character>( );
for(int i=0;i<cs.length;i++){
list.add(cs[i]);
}
int maxcount=1;
char maxc=cs[0];
for(int i=0;i<list.size()-1;i++){
int count=1;
for(int j=i+1;j<list.size();j++){
if(list.get(i)==list.get(j)){
list.remove(j);
j--;
count++;
}
if(count>maxcount){
maxc=list.get(i);
maxcount=count;
}
}
}
System.out.println(maxc+" "+maxcount);
}
}
第4题:拆分字符串,字符串中含有逗号和数字,对数字排序并输出
package com.sheepmu.text;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/****
* 拆分字符串,字符串中含有逗号和数字,对数字排序并输出
* @author SheepMu
*/
public class HWText {
public static void main(String[] args){
String s0="123,45,25,85";
String[] s1=s0.split(",");
// for(int i=0;i<s1.length;i++)
// System.out.print(s1[i]+" ");//123 45 25 85 !!!!!!!!!!!!
System.out.println(Arrays.toString(s1));//[123, 45, 25, 85] !!!!数组本身就会有,分隔的
int[] a=new int[s1.length];
for(int i=0;i<a.length;i++)
a[i]=Integer.parseInt(s1[i]);
Arrays.sort(a);
System.out.println(Arrays.toString(a));
for(int number:a)
System.out.print(number+" ");//25 45 85 123
}
}
评委,judge_type[i] == 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分 *
0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分 = 专家评委平均分,总分取整。函数最终返回选手得分。 函数接口 int cal_score(int score[], int judge_type[], int n)
package com.sheepmu.text;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/****
* 选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评委类别,judge_type[i] == 1,表示专家
评委,judge_type[i] == 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分 *
0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分 = 专家评委平均分,总分取整。函数最终返回选手得分
函数接口 int cal_score(int score[], int judge_type[], int n)
* @author SheepMu
*/
public class HWText {
public static void main(String[] args){
int[] score={60,70,80,70,90,60,80};
int[] judge_type={1,2,1,2,2,1,2};
int n=7;
int result_core=cal_score(score,judge_type,n);
System.out.println("最后结果:"+ result_core);
}
public static int cal_score(int score[],int judge_type[],int n){
double sum_all=0;
double sum_specilist=0;
double sum_common=0;
int average_specialist=0;
int average_common=0;
int result=0;
List<Integer> specilist_index=new ArrayList<Integer>();
for(int i=0;i<judge_type.length;i++)
if(judge_type[i]==1)
specilist_index.add(i);
System.out.println("专家的下标:"+ specilist_index);//专家的下标:[0, 2, 5]
for(int i=0;i< specilist_index.size();i++)//!!!!!!!!!!
for(int j=0;j< score.length;j++)//!!!!!!!!!!
if(specilist_index.get(i)==j)
sum_specilist+=score[j];
System.out.println("专家的总分:"+ sum_specilist);//专家的总分:200.0
for(int k=0;k< score.length;k++)
sum_all+=score[k];
System.out.println("全部总分:"+ sum_all);//全部总分:510.0
sum_common= sum_all-sum_specilist;
System.out.println("大众点评总分:"+ sum_common);//大众点评总分:310.0
average_specialist=(int)(sum_specilist/specilist_index.size());
System.out.println("专家平均分:"+ average_specialist);//专家平均分:66
average_common=(int)(sum_common/(n-specilist_index.size()));
System.out.println("大众平均分:"+ average_common);//大众平均分:77
result=(int)(average_specialist*0.6+average_common*0.4);
return result;
}
}
public class HWText {
public static void main(String[] args){
int[] score={60,70,80,70,90,60,80};
int[] judge_type={1,2,1,2,2,1,2};
int n=7;
int result_core=cal_score(score,judge_type,n);
System.out.println("最后结果:"+ result_core);
}
public static int cal_score(int score[],int judge_type[],int n){
double sum_all=0;
double sum_specilist=