以下華為編程比賽題目都是網上整理得到的,代碼都是自己調試過的,由於網上java答案較少,歡迎大家批評指正,也希望對準備華為上機的童鞋們有一點點幫助。在練習的過程中成長,加油! ~~
1. 就餐抽查(30分)
問題描述:
某公司由於人多,午餐分為多批次就餐,嚴格要求每批次就餐時間。並定期抽查就餐情況。請編寫程序實現就餐抽查情況。
要求實現函數:
void check_lunch(int num, int time,int input[], int output[])
【輸入】 int num,就餐總人數
int time,就餐分批數
char input[],就餐情況
【輸出】 char output[], 違規就餐情況
【返回】 無
注:對就餐分3批的情況,12人就餐,正確的就餐情況應如下分佈[1,2,3,1,2,3,1,2,3,1,2,3],不符合該分佈的即是違規,輸出時對相應位置0。
示例
1) 輸入:num = 12,time = 3,input =[1,2,3,3,1,3,1,1,1,1,2,3]
輸出:output = [1,2,3,0,0,3,1,0,0,1,2,3]
2) 輸入:num = 11,time = 4,intput = [1,2,3,4,2,3,3,4,1,2,3]
輸出:output = [1,2,3,4,0,0,3,4,1,2,3]
package com.sheepmu.text; import java.util.Arrays; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ int num=11,time=4; int[] input={1,2,3,4,2,3,3,4,1,2,3}; // int[] output=new int[]{}; int[] output=new int[num]; HWCompetition hwc=new HWCompetition(); hwc.check_lunch( num, time, input, output); } void check_lunch(int num, int time,int input[], int output[]){ System.out.println(Arrays.toString(input)); int j=0; for(int i=0;i<num;i++){ int yushu=(i+1)%time; if(yushu!=0){ if(input[i]==yushu){ output[j]=yushu; } else output[j]=0; j++; } else{//餘數==0的情況if(input[i]==time){ output[j]=time; } else output[j]=0; j++; } } System.out.println(Arrays.toString(output)); } }2. 輸入聯想(30分)
問題描述:
輸入聯想功能是非常實用的一個功能,請編程實現類似功能。
要求實現函數:
void auto_complete(char *str, char *tmp,char *output)
【輸入】 char *str,候選字符串
char *tmp,輸入字符串
【輸出】 int *output,聯想匹配的字符串
【返回】 無
注:候選字符串以空格隔開,輸入字符串僅從字符串開始處匹配。將匹配的子字符串輸出,同樣以空格隔開。如無匹配成功的子字符串,則輸出空字符串。
示例
1) 輸入:str = chengdu chongqing,tmp = c
輸出:output = chengdu Chongqing
2) 輸入:str = chengdu chongqing,tmp = che
輸出:end = Chengdu
3)輸入:str = beijing nanjing,tmp = jing
輸出:end =
方法一:
package com.sheepmu.text; import java.util.ArrayList; import java.util.List; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ String str="chengdu chongqing"; String tmp="che"; String output=""; HWCompetition hwc=new HWCompetition(); hwc.auto_complete( str,tmp, output); } void auto_complete(String str,String tmp, String output){ String[] strs=str.split("//s"); List<String> list=new ArrayList<String>(); for(int i=0;i<strs.length;i++) list.add(strs[i]); System.out.println("list--->"+list); System.out.println("tmp--->"+tmp); char[] tmps=tmp.toCharArray(); int len_list=list.size(); int len_t=tmps.length; for(int j=0;j<len_list;j++){ int len_list_j=list.get(j).length(); char[] list_j=list.get(j).toCharArray(); for(int k=0;k<len_t;k++){ if(len_t>len_list_j){ list.remove(j); len_list--;//!!!!!!!!!!!!!!! j--;//!!!!!!!!!!!!! 要是不這樣28行會出問題,因為remove後size變成了1,但是j即index卻變成了1 break; } else {//temp的長度小於帶收索的長度if(tmps[k]!=list_j[k]){ list.remove(j); len_list--;//!!!!!!!!!!!!!!! j--;//!!!!!!!!!!!!! break; } } } } // output= list.toString();//這樣會[chengdu] ,即會帶有兩邊的[] if(!list.isEmpty()){ StringBuffer sb=new StringBuffer(); sb.append("end="); for(String result:list){ sb.append(result+" ");//加上空格! !最後再給去掉尾巴的“ ”; } output=sb.toString().trim();//!! } else{ output="end="; } System.out.println(output); } }方法二:
package com.sheepmu.text; import java.util.ArrayList; import java.util.List; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ String str="chengdu chongqing"; String tmp="che"; String output=""; HWCompetition hwc=new HWCompetition(); hwc.auto_complete( str,tmp, output); } void auto_complete(String str,String tmp, String output){ String[] strs=str.split("//s");//和下面一樣,應該是只有/s,/d啊之類的才加/ List<String> list=new ArrayList<String>(); for(int i=0;i<strs.length;i++) list.add(strs[i]); System.out.println("list--->"+list); System.out.println("tmp--->"+tmp); int len_list=list.size(); for(int j=0;j<len_list;j++){//還有一個好方法:!list.get(j).startsWith(tmp);!!!!!!!!!!!!!!!!!!!! if(!list.get(j).matches(tmp+"[az]*")){//正則表達式就是爽啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! list.remove(j); len_list--; j--; } } if(!list.isEmpty()){ StringBuffer sb=new StringBuffer(); sb.append("end="); for(String result:list){ sb.append(result+" ");//加上空格! !最後再給去掉尾巴的“ ”; } output=sb.toString().trim();//!! } else{ output="end="; } System.out.println(output); } } 3. 農場計數問題(20分)
問題描述:
已知某農場中有一群雞和兔子,總共有M個頭和N隻腳,計算總共有多少雞和兔子・
要求實現函數:
public String getFowlsNum(int iHeadNum, int iFootNum, ArrayList iChickenNum, ArrayList iRabbitNum)
【輸入】iHeadNum: 總共頭的數量
iFootNum: 總共腳的數量【輸出】iChickenNum: 雞的數量
iRabbitNum: 兔子的數量【返回】"0": 找到符合要求的雞和兔子的數量
"-1": 未找到符合要求的數量
示例
輸入:iHeadNum =201, iFootNum=604
輸出:iChickenNum.add(100), iRabbitNum.add(101) 返回:"0"
輸入:iHeadNum =201, iFootNum=123
輸出: iChickenNum.add(0), iRabbitNum.add(0) 返回:"-1"
package com.sheepmu.text; import java.util.ArrayList; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ int iHeadNum=201; int iFootNum=604; ArrayList iChickenNum=new ArrayList(); ArrayList iRabbitNum=new ArrayList(); HWCompetition hwc=new HWCompetition(); hwc.getFowlsNum( iHeadNum,iFootNum,iChickenNum,iRabbitNum); } public String getFowlsNum(int iHeadNum,int iFootNum,ArrayList iChickenNum,ArrayList iRabbitNum){ if(iFootNum%2!=0){//!!!!! System.out.println("iChickenNum.add(0),iRabbitNum.add(0)"); return "-1";//如果腳的數量為奇數,則明顯不對, } else{ int ji=2*iHeadNum-iFootNum/2; int tui=iFootNum/2- iHeadNum; if(ji>=0&&tui>=0) System.out.println("iChickenNum.add("+ji+"),iRabbitNum.add("+tui+")"); return "0"; } } } 4.字符串壓縮(30分)
問題描述:
將給定的字符串,按照規格壓縮,輸出壓縮後的字符串。壓縮規格為:相同字符連續,則壓縮為“字符+數字個數”,如”aaaa”壓縮為”a4”
注:1、僅是單個字符連續才壓縮,如babababa則不能壓縮
2、待壓縮字符串中不包含數字和轉義符・
要求實現方法:
public String compressStr(String srcStr) 【輸入】srcStr: 待壓縮的字符串【輸出】無【返回】 壓縮後的字符串示例輸入:srcStr = "aaacccddef" 返回:"a3c3d2ef"
方法一:(用ArrayList)詳情見華為上機匯總第8 題
方法二:(用String,可讀性不如上者,就當為熟悉API吧)
package com.sheepmu.text; import java.util.ArrayList; import java.util.List; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ String str="abcddef"; HWCompetition hwc=new HWCompetition(); String result=hwc.compressStr(str); System.out.println(result); } public String compressStr(String str){ StringBuffer sb=new StringBuffer(); for(int i=0;i<str.length();i++){ if(str.length()==0) break; if(str.length()==1) sb.append(str.charAt(i));//針對aaacccddef for(int j=i+1;j<str.length();j++){ if(str.charAt(i)==str.charAt(j)){ if(j==str.length()-1){//針對當後面一直沒有出現不同時:aaacccddeffff sb.append(str.length()).append(str.charAt(i)); str=str.substring(j);//長度只剩0了。一定要賦給新的str!!!!!!!!!!!!!!!!!!!!!!!! break; } } else{//遇到不等時if(j==1) sb.append(str.charAt(i)); else sb.append(j).append(str.charAt(i)); System.out.println(sb.toString()); str=str.substring(j); i--; break; } } } return sb.toString(); } } 5. 排序算法(20分)
問題描述:
將給定的無序整數數組降序排列後輸出,輸入的無序數組長度為N,類型為unsigned int
要求實現函數
void DscSort (const int InputArray[], unsigned int n, int OutputArray[])
【輸入】InputArray: 給定的無序數組
n: 數組長度【輸出】OutputArray: 排序後的數組【返回】無示例輸入:InputArray={1,5,4,8,3,2,9,6,7,0}
輸出:OutputArray={9,8,7,6,5,4,3,2,1,0}
方法一: (直接調用api)思路:升序再倒過來輸出
package com.sheepmu.text; import java.util.Arrays; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ int[] inputArray={1,5,4,8,3,2,9,6,7,0}; int n=inputArray.length; int[] outputArray=new int[n]; HWCompetition hwc=new HWCompetition(); hwc.dscSort (inputArray,n,outputArray); } void dscSort (int InputArray[], int n, int OutputArray[]){ Arrays.sort(InputArray);//升序int i=0; while(--n>=0){ OutputArray[i++]=InputArray[n]; } System.out.println(Arrays.toString(OutputArray)); } }方法二: (若題目規定不能調用api)
package com.sheepmu.text; import java.util.Arrays; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ int[] inputArray={1,5,4,8,3,2,9,6,7,0}; int n=inputArray.length; int[] outputArray=new int[n]; HWCompetition hwc=new HWCompetition(); hwc.dscSort (inputArray,n,outputArray); System.out.println(Arrays.toString(inputArray)); } void dscSort (int InputArray[], int n, int OutputArray[]){//自己寫:快排降序int high=0; int low=n-1; sort(InputArray,high,low); } void sort(int InputArray[],int high,int low){ int i,j,temp; i=high;//高端下標j=low;//低端下標temp=InputArray[i];//取第一個元素為標準元素。 while(i<j){//遞歸出口是low>=high while(i<j&&temp>InputArray[j])//後端比temp小,符合降序,不管它,low下標前移j--;//while完後指比temp大的那個if(i<j){ InputArray[i]=InputArray[j]; i++; } while(i<j&&temp<InputArray[i]) i++; if(i<j){ InputArray[j]=InputArray[i]; j--; } }//while完,即第一盤排序InputArray[i]=temp;//把temp值放到它該在的位置。 if(high<i) //注意,下標值sort(InputArray,high,i-1);//對左端子數組遞歸if(i<low) //注意,下標值sort(InputArray,i+1,low);//對右端子數組遞歸;對比上面例子,其實此時i和j是同一下標!!!!!!!!!!!!! } }6.查找最大的不重複數(30分)
問題描述
如果一個數字十進製表達時,不存在連續兩位相同,則稱之為“不重複數”。例如,105、1234和12121都是“不重複數”,而11、100和1225不是。給定一個正整數A,返回大於A的最小“不重複數”。 A小於100000
要求實現函數
int getNotRepeatNum(int iValue)
【輸入】lValue: 給定的數字,返回大於該值的最小不重複數【輸出】無【返回】大於iValue的最小不重複數示例輸入:iValue =54
返回: 56
輸入:iValue =10
返回: 12
輸入:iValue =98
返回: 101
輸入:iValue =21099
返回: 21201
package com.sheepmu.text; import java.util.Arrays; import java.util.Scanner; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ Scanner input=new Scanner(System.in); int a=input.nextInt(); System.out.println("輸入的數字為---->"+a) ; HWCompetition hwc=new HWCompetition(); int result=hwc.getNotRepeatNum(a); System.out.println("返回的大於"+a+"的最小不重複數---->"+result) ; } int getNotRepeatNum( int iValue){ int i=0; for(i=iValue+1 ;i<100000;i++){ if(!isRepeatNum(i)){ break;//!!!不然要白白運行好多好多次} } return i; } public boolean isRepeatNum(int a){ String str=a+""; char[] cs=str.toCharArray(); int len=cs.length; for(int i=0;i<len-1;i++){//因為後面要i+1,如果是i<len就要下標越界。 if(cs[i]==cs[i+1]) return true; } return false; } } 7. 撲克牌比較(30分)
問題描述:
在撲克中,牌的類型包括:A(1),2,3,4,5,6,7,8,9,T(10),J(11),Q(12),K(13),D(小鬼devilkin),B(大鬼Belial)。
請做一個簡單的程序,輸入兩張牌的字符,比如"2"和"K",判斷牌的大小,規則如下:
B>D>2>A>K>Q>J>10....>3 最小的為3
判斷規則:比較cFirstCard和cSecondCard,如果FirstCar大,那麼返回1;如果相同,返回0;如果FirstCar小,返回-1。
要求實現函數:
int CompareOneCard(char cFirstCard, char cSecondCard)
【輸入】 char cFirstCard:需要比較的第一張牌
char cSecondCard: 需要比較的第二張牌注意:輸入的為字符'A','2',…,'9','T','J','Q','K','D','B'
【返回】 int類型:返回兩張牌的比較結果注意:不用考慮輸入的合法性,這個由函數的使用者保證。輸入的牌均為字符'1','2'…'9',大寫的'A','T','J','Q','K','D','B'。
舉例:
輸入:'4'、'5',返回:-1
輸入:'6'、'6',返回:0
package com.sheepmu.text; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ char cFirstCard='5'; char cSecondCard= '6'; HWCompetition hwc=new HWCompetition(); int result=hwc.CompareOneCard(cFirstCard,cSecondCard); System.out.println("比較的結果"+result); } int CompareOneCard(char cFirstCard, char cSecondCard){ int iF=getReallN(cFirstCard); System.out.println("iF--->"+ iF); int iS=getReallN(cSecondCard); System.out.println("iS--->"+ iS); return iF>iS ? 1: iF<iS? -1:0 ;//不需要添括號} int getReallN(char c){ int value=0; switch(c){ case 'T': value=10; break; case 'J': value=11; break; case 'Q': value=12; break; case 'K': value=13; break; case 'A': value=14; break; case '2': value=15; break; case 'D': value=16; break; case 'B': value=17; break; case '3': case '4': case '5': case '6': case '7': case '8': case '9': // value=c; // 超級笨蛋錯誤!!!!! 若輸入9,'9'=57!!!!字符9對於的值不是數字9而是該字符本身對於的值。 value=Integer.parseInt(c+"") ; break; } return value; } } 8. 乾瞪眼(30分)
問題描述:
在成都,流行一種撲克遊戲叫“乾瞪眼”。使用撲克牌,包括:A(1),2,3,4,5,6,7,8,9,T(10),J(11),Q(12),K(13)。
注意:10用T替換,這裡暫時不考慮大鬼和小鬼。
兩手牌的大小規則如下:
a) 單牌:4比3大,5比4大,只有兩張牌剛好大一點時才能進行比較,比較順序為:A>K>Q>J>T>9>8>7>6>5>4>3。
比如:6大於5,但是不能比4大,6和4不能比較。單牌2屬於特殊牌,他可以和其他所有普通單牌比較,並且是最大的。
請注意3,他不能大於任何牌。
b) 對子:即兩張牌的點數相同,規則和單牌相似,也需要進行類似處理。兩個2是特殊對子,可以大於所有的其他對子。
注意:對子和單牌是不能進行比較的。
c) 炸彈:3個點數相同的牌。炸彈可以大於任何單張和對子,炸彈之間的比較不用像單牌和對子那樣,只能大一點才能比較。
只要滿足:222>AAA>KKK>QQQ>JJJ>TTT>…>333的規則的即可。即222是最大的,AAA可以大於KKK,也可以大於333。
d) 其他規則暫不考慮實現現在請你實現一個程序,自動判斷兩手牌的大小,注意:輸入的牌只會出現3種類型:單張,對子,炸彈。張數最多3張。
不會出現2個單牌。比如”25”,也不會出現一個對子加單牌,比如”334”等,類似輸入異常你可以不用考慮。
但是pFirstCards為單牌,pSecondCards為對子,類似的組合輸入是合法的。
要求實現函數:
int CompareCards(char *pFirstCards, char *pSecondCards)
【輸入】 char *pFirstCards:需要比較的第一手牌
char *pSecondCards:需要比較的第二手牌【返回】 int 類型,返回值說明:
如果pFirstCards和pSecondCards無法比較,比如”3”和”6”;”55”和”6”等,返回0。
如果pFirstCards大於pSecondCards,返回1。
如果pFirstCards等於pSecondCards,返回2。
如果pFirstCards小於pSecondCards,返回3。
注意:不用考慮輸入的合法性,這個由函數的使用者保證。輸入的牌均為字符'1','2'..'9',大寫的'A','T','J','Q','K'。
示例輸入: “77”、 “33”,返回:0
輸入: “77”、 “77”,返回:2
思路: 1. 1vs2 or 2vs1 此情況只需判斷長度即可得出結果,無需後續比較
2. 1vs1 or 2 vs2 同一種比較方式
3. 3vs3 和情況2不同的比較方式
4. 3 vs 非3 or 非3vs3
package com.sheepmu.text; import java.util.Arrays; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ String pFirstCards="QQ"; String pSecondCards="444"; HWCompetition hwc=new HWCompetition(); int result=hwc.CompareCards(pFirstCards,pSecondCards); System.out.println("比較的結果"+result); } int CompareCards( String pFirstCards, String pSecondCards){ int len1=pFirstCards.length(); int len2=pSecondCards.length(); if((len1==1&&len2==2)||(len1==2&&len2==1))// 1vs2,無法比較。為提供效率,能先搞定的搞定,這種情況就不需要執行後面的了。 return 0; int[] is1=getReallNs(pFirstCards); int[] is2=getReallNs(pSecondCards); // System.out.println(Arrays.toString(is1));//[12, 12] // System.out.println(Arrays.toString(is2));//[4, 4, 4] if((len1==1&&len2==1)||(len1==2&&len2==2)){//1vs1 或者2vs2,比較方式是一樣的。其實不用天括號if(Math.abs(is1[0]-is2[0])==1) //有題目知,長度為2肯定是對子情況return is1[0]-is2[0]>0? 1:3; else if(is1[0]==is2[0]) return 2; else return 0; } if(len1==3&&len2==3) //炸彈不可能相等,因為一副牌沒有6個一樣的。 return is1[0]>is1[0]? 1:3; if(len1==3&&len2<3||len1<3&&len2==3) return len1==3? 1:3; return 0;//其實測試用例應該永遠都不會執行這一句。 } int[] getReallNs(String s){ int len=s.length(); int[] cs =new int[len]; for(int i=0;i<len;i++){ cs[i]=getReallN(s.charAt(i)); } return cs; } int getReallN(char c){ int value=0; switch(c){ case 'T': value=10; break; case 'J': value=11; break; case 'Q': value=12; break; case 'K': value=13; break; case 'A': value=14; break; case '2': value=15; break; case '3': case '4': case '5': case '6': case '7': case '8': case '9': // value=c; // 超級笨蛋錯誤!!!!! 若輸入9,'9'=57!!!!字符9對於的值不是數字9而是該字符本身對於的值。 value=Integer.parseInt(c+"") ; break; } return value; } } 9. 矩陣轉置(20分)
問題描述:
將一個N*N矩陣的行列互換。 ・
要求實現函數:
public String matrixTranspose (String inArr, int n)
【輸入】inArr: 輸入的字符矩陣
n: N*N矩陣的行數【返回】轉置後的字符矩陣注:
輸入輸出的矩陣都是以一維形式保存的二維數組,比如輸入為"1,2,3,4,5,6,7,8,9",實際上表示如下3*3的矩陣:
1,2,3,4,5,6,7,8,9
示例輸入InArr ="1,2,3,4,5,6,7,8,9",n=3 返回:"1,4,7,2,5,8,3,6,9"
注:筆者人為的把題目稍微添成了每項為字符串而不是字符。字符更簡單,字符串時注意截取時,13不是1,3
方法一:被題目忽悠的用了矩陣。就當是熟悉下二維數組嘛
package com.sheepmu.text; import java.util.Arrays; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ String inarr="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16"; int n=4; System.out.println("inarr---->"+inarr); HWCompetition hw=new HWCompetition(); String result=hw.matrixTranspose(inarr,n); System.out.println("result---->"+result); } public String matrixTranspose(String inarr,int n){//要把字符串中的逗號去掉,不然逗號也是string的一個下標值了,輸出時再加上就是咯String[] ss=inarr.split(","); String[][] css=new String[n][n]; int k=0; for(int i=0;i<n;i++){//字符串轉換為二維數組for(int j=0;j<n;j++){ css[i][j]=ss[k]; k++; } } StringBuffer sb=new StringBuffer(); for(int i=0;i<n;i++){// 二維數組逆置for(int j=0;j<n;j++){ sb.append(css[j][i]+",");//尾巴多了一個, } } return sb.substring(0, sb.length()-1); } }方法二:更簡單,完全不需矩陣。
package com.sheepmu.text; import java.util.Arrays; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ String inarr="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16"; int n=4; System.out.println("inarr---->"+inarr); HWCompetition hw=new HWCompetition(); String result=hw.matrixTranspose(inarr,n); System.out.println("result---->"+result); } public String matrixTranspose(String inarr,int n){//要把字符串中的逗號去掉,不然逗號也是string的一個下標值了,輸出時再加上就是咯String[] ss=inarr.split(","); StringBuffer sb=new StringBuffer(); for(int i=0;i<n;i++){ //對於題目例子: 需要的下標順序是036147258 for(int j=i;j<ss.length;j+=n){ sb.append(ss[j]+",");//尾巴多了逗號} } return sb.substring(0, sb.length()-1);//去掉尾巴逗號} } 10.路燈(20分)
某省會城市街道縱橫交錯,為了監控路燈的運行狀況,每條街道使用一個數字字符串標識該街道上所有路燈的運行狀況。
假設路燈只有如下3種狀態(分別用數字0, 1, 2標識,一盞路燈只對應其中一種狀態):
0 標識路燈熄滅;
1 標識路燈開啟;
2 標識路燈故障;
請根據輸入的字符串,找出該街道上連續的處於相同狀態的路燈的最大個數。若兩種狀態的路燈數量相同,則返回最先出現的路燈狀態。
輸入街道上連續的路燈組成的狀態字符串。字符串中只包含數字,每個路燈的狀態為0,1,2中的一種狀態。如“1101”代表4盞路燈,第3盞路燈為熄滅狀態,其它3盞為開啟狀態。
輸出連續為相同狀態的路燈的最大數量;
上述路燈的狀態;
要求:先輸出數量,再輸出狀態,兩個整數間採用一個空格間隔。如輸出:
53 2
樣例輸入
112200111
樣例輸出
3 1
package com.sheepmu.text; import java.util.Arrays; /* * @author sheepmu */ public class HWCompetition { public static void main(String[] args){ String s="112001110";//這類題一定要注意最後全部相同的情況,即沒有再出現與之不同的,不然很容易死循環。 System.out.println("inarr---->"+s); HWCompetition hw=new HWCompetition(); String result=hw.ludeng(s); System.out.println("題目結果---->"+result); } public String ludeng(String s){//要把字符串中的逗號去掉,不然逗號也是string的一個下標值了,輸出時再加上就是咯char[] as=s.toCharArray(); int len=as.length; int maxc=1; // int mubiaobindex=0;//不要製造多餘變量// int mubiaovalue=as[0]; int bindex=0;//如果需要返回最大連續的第一個下標,如此時的6;若題目有此需求:則設置兩個變量:“每部分”的次數+首次出現的下標。 char value=as[0];//若題目需要返回最大長度部分的值即本題狀態的1 for(int i=0;i<len-1; ){ int count=1;//每次外層循環是把count令為1,開始新的計數bindex=i; value=as[i]; for(int j=i+1;j<len;j++){ if(as[i]!=as[j]){ i=j; break; } else{ i++;//!!!!!!!!!!!如果後面沒有出現不同的;如果不加這一句,外層循環會一直執行。 count++; } } if(count>maxc){ maxc=count; // mubiaobindex=bindex; // mubiaovalue=value; System.out.println("maxc--->"+maxc+" 起始下標---->"+bindex+" 狀態---->"+value); } } StringBuffer sb=new StringBuffer(); return sb.append(maxc+" ").append(value).toString(); } }以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。