十道java華為編程大賽題目
以下華為編程比賽題目都是網(wǎng)上整理得到的,代碼都是自己調(diào)試過的,由于網(wǎng)上java答案較少,歡迎大家批評(píng)指正,也希望對(duì)準(zhǔn)備華為上機(jī)的童鞋們有一點(diǎn)點(diǎn)幫助。在練習(xí)的過程中成長(zhǎng),加油!~~
1. 就餐抽查(30分)
問題描述:
某公司由于人多,午餐分為多批次就餐,嚴(yán)格要求每批次就餐時(shí)間。并定期抽查就餐情況。請(qǐng)編寫程序?qū)崿F(xiàn)就餐抽查情況。
要求實(shí)現(xiàn)函數(shù):
void check_lunch(int num, int time,int input[], int output[])
【輸入】 int num,就餐總?cè)藬?shù)
int time,就餐分批數(shù)
char input[],就餐情況
【輸出】 char output[], 違規(guī)就餐情況
【返回】 無
注:對(duì)就餐分3批的情況,12人就餐,正確的就餐情況應(yīng)如下分布[1,2,3,1,2,3,1,2,3,1,2,3],不符合該分布的即是違規(guī),輸出時(shí)對(duì)相應(yīng)位置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{//余數(shù)==0的情況
if(input[i]==time){
output[j]=time;
}
else
output[j]=0;
j++;
}
}
System.out.println(Arrays.toString(output));
}
}
2. 輸入聯(lián)想(30分)
問題描述:
輸入聯(lián)想功能是非常實(shí)用的一個(gè)功能,請(qǐng)編程實(shí)現(xiàn)類似功能。
要求實(shí)現(xiàn)函數(shù):
void auto_complete(char *str, char *tmp,char *output)
【輸入】 char *str,候選字符串
char *tmp,輸入字符串
【輸出】 int *output,聯(lián)想匹配的字符串
【返回】 無
注:候選字符串以空格隔開,輸入字符串僅從字符串開始處匹配。將匹配的子字符串輸出,同樣以空格隔開。如無匹配成功的子字符串,則輸出空字符串。
示例
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行會(huì)出問題,因?yàn)閞emove后size變成了1,但是j即index卻變成了1
break;
}
else {//temp的長(zhǎng)度小于帶收索的長(zhǎng)度
if(tmps[k]!=list_j[k]){
list.remove(j);
len_list--;//!!!!!!!!!!!!!!!
j--;//!!!!!!!!!!!!!
break;
}
}
}
}
// output= list.toString();//這樣會(huì) [chengdu] ,即會(huì)帶有兩邊的[]
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");//和下面一樣,應(yīng)該是只有\(zhòng)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++){//還有一個(gè)好方法:!list.get(j).startsWith(tmp);!!!!!!!!!!!!!!!!!!!!
if(!list.get(j).matches(tmp+"[a-z]*")){//正則表達(dá)式就是爽啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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. 農(nóng)場(chǎng)計(jì)數(shù)問題(20分)
問題描述:
已知某農(nóng)場(chǎng)中有一群雞和兔子,總共有M個(gè)頭和N只腳,計(jì)算總共有多少雞和兔子 ·
要求實(shí)現(xiàn)函數(shù):
public String getFowlsNum(int iHeadNum, int iFootNum, ArrayList iChickenNum, ArrayList iRabbitNum)
【輸入】iHeadNum: 總共頭的數(shù)量
iFootNum: 總共腳的數(shù)量
【輸出】iChickenNum: 雞的數(shù)量
iRabbitNum: 兔子的數(shù)量
【返回】"0": 找到符合要求的雞和兔子的數(shù)量
"-1": 未找到符合要求的數(shù)量
示例
輸入: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";//如果腳的數(shù)量為奇數(shù),則明顯不對(duì),
}
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分)
問題描述:
將給定的字符串,按照規(guī)格壓縮,輸出壓縮后的字符串。壓縮規(guī)格為:相同字符連續(xù),則壓縮為“字符+數(shù)字個(gè)數(shù)”,如”aaaa”壓縮為”a4”
注:1、僅是單個(gè)字符連續(xù)才壓縮,如babababa則不能壓縮
2、待壓縮字符串中不包含數(shù)字和轉(zhuǎn)義符 ·
要求實(shí)現(xiàn)方法:
public String compressStr(String srcStr) 【輸入】srcStr: 待壓縮的字符串
【輸出】無
【返回】 壓縮后的字符串
示例
輸入:srcStr = "aaacccddef" 返回:"a3c3d2ef"
方法一:(用ArrayList)詳情見華為上機(jī)匯總第 8 題
方法二:(用String,可讀性不如上者,就當(dāng)為熟悉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));//針對(duì)aaacccddef
for(int j=i+1;j<str.length();j++){
if(str.charAt(i)==str.charAt(j)){
if(j==str.length()-1){//針對(duì)當(dāng)后面一直沒有出現(xiàn)不同時(shí):aaacccddeffff
sb.append(str.length()).append(str.charAt(i));
str=str.substring(j);//長(zhǎng)度只剩0了。一定要賦給新的str!!!!!!!!!!!!!!!!!!!!!!!!
break;
}
}
else{//遇到不等時(shí)
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分)
問題描述:
將給定的無序整數(shù)數(shù)組降序排列后輸出,輸入的無序數(shù)組長(zhǎng)度為N,類型為unsigned int
要求實(shí)現(xiàn)函數(shù)
void DscSort (const int InputArray[], unsigned int n, int OutputArray[])
【輸入】InputArray: 給定的無序數(shù)組
n: 數(shù)組長(zhǎng)度
【輸出】OutputArray: 排序后的數(shù)組
【返回】無
示例
輸入:InputArray={1,5,4,8,3,2,9,6,7,0}
輸出:OutputArray={9,8,7,6,5,4,3,2,1,0}
方法一: (直接調(diào)用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));
}
}

方法二: (若題目規(guī)定不能調(diào)用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;//高端下標(biāo)
j=low;//低端下標(biāo)
temp=InputArray[i];//取第一個(gè)元素為標(biāo)準(zhǔn)元素。
while(i<j){//遞歸出口是 low>=high
while(i<j&&temp>InputArray[j])//后端比temp小,符合降序,不管它,low下標(biāo)前移
j--;//while完后指比temp大的那個(gè)
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) //注意,下標(biāo)值
sort(InputArray,high,i-1);//對(duì)左端子數(shù)組遞歸
if(i<low) //注意,下標(biāo)值
sort(InputArray,i+1,low);//對(duì)右端子數(shù)組遞歸 ;對(duì)比上面例子,其實(shí)此時(shí)i和j是同一下標(biāo)!!!!!!!!!!!!!
}
}
6.查找最大的不重復(fù)數(shù)(30分)
問題描述
如果一個(gè)數(shù)字十進(jìn)制表達(dá)時(shí),不存在連續(xù)兩位相同,則稱之為“不重復(fù)數(shù)”。例如,105、1234和12121都是“不重復(fù)數(shù)”,而11、100和1225不是。給定一個(gè)正整數(shù)A,返回大于A的最小“不重復(fù)數(shù)”。A小于100000
要求實(shí)現(xiàn)函數(shù)
int getNotRepeatNum(int iValue)
【輸入】lValue: 給定的數(shù)字,返回大于該值的最小不重復(fù)數(shù)
【輸出】無
【返回】大于iValue的最小不重復(fù)數(shù)
示例
輸入: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("輸入的數(shù)字為---->"+a) ;
HWCompetition hwc=new HWCompetition();
int result=hwc.getNotRepeatNum(a);
System.out.println("返回的大于"+a+"的最小不重復(fù)數(shù)---->"+result) ;
}
int getNotRepeatNum( int iValue){
int i=0;
for(i=iValue+1 ;i<100000;i++){
if(!isRepeatNum(i)){
break;//!!!不然要白白運(yùn)行好多好多次
}
}
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++){//因?yàn)楹竺嬉猧+1,如果是i<len就要下標(biāo)越界。
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)。
請(qǐng)做一個(gè)簡(jiǎn)單的程序,輸入兩張牌的字符,比如"2"和"K",判斷牌的大小,規(guī)則如下:
B>D>2>A>K>Q>J>10....>3 最小的為3
判斷規(guī)則:比較cFirstCard和cSecondCard,如果FirstCar大,那么返回1;如果相同,返回0;如果FirstCar小,返回-1。
要求實(shí)現(xiàn)函數(shù):
int CompareOneCard(char cFirstCard, char cSecondCard)
【輸入】 char cFirstCard:需要比較的第一張牌
char cSecondCard: 需要比較的第二張牌
注意:輸入的為字符'A','2',…,'9','T','J','Q','K','D','B'
【返回】 int類型:返回兩張牌的比較結(jié)果
注意:不用考慮輸入的合法性,這個(gè)由函數(shù)的使用者保證。輸入的牌均為字符'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("比較的結(jié)果"+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 ;//不需要添括號(hào)
}
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; // 超級(jí)笨蛋錯(cuò)誤!!!!! 若輸入9,'9'=57!!!!字符9對(duì)于的值不是數(shù)字9而是該字符本身對(duì)于的值。
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替換,這里暫時(shí)不考慮大鬼和小鬼。
兩手牌的大小規(guī)則如下:
a) 單牌:4比3大,5比4大,只有兩張牌剛好大一點(diǎn)時(shí)才能進(jìn)行比較,比較順序?yàn)椋篈>K>Q>J>T>9>8>7>6>5>4>3。
比如:6大于5,但是不能比4大,6和4不能比較。單牌2屬于特殊牌,他可以和其他所有普通單牌比較,并且是最大的。
請(qǐng)注意3,他不能大于任何牌。
b) 對(duì)子:即兩張牌的點(diǎn)數(shù)相同,規(guī)則和單牌相似,也需要進(jìn)行類似處理。兩個(gè)2是特殊對(duì)子,可以大于所有的其他對(duì)子。
注意:對(duì)子和單牌是不能進(jìn)行比較的。
c) 炸彈:3個(gè)點(diǎn)數(shù)相同的牌。炸彈可以大于任何單張和對(duì)子,炸彈之間的比較不用像單牌和對(duì)子那樣,只能大一點(diǎn)才能比較。
只要滿足:222>AAA>KKK>QQQ>JJJ>TTT>…>333的規(guī)則的即可。即222是最大的,AAA可以大于KKK,也可以大于333。
d) 其他規(guī)則暫不考慮實(shí)現(xiàn)
現(xiàn)在請(qǐng)你實(shí)現(xiàn)一個(gè)程序,自動(dòng)判斷兩手牌的大小,注意:輸入的牌只會(huì)出現(xiàn)3種類型:?jiǎn)螐?,?duì)子,炸彈。張數(shù)最多3張。
不會(huì)出現(xiàn)2個(gè)單牌。比如”25”,也不會(huì)出現(xiàn)一個(gè)對(duì)子加單牌,比如”334”等,類似輸入異常你可以不用考慮。
但是pFirstCards為單牌,pSecondCards為對(duì)子,類似的組合輸入是合法的。
要求實(shí)現(xiàn)函數(shù):
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。
注意:不用考慮輸入的合法性,這個(gè)由函數(shù)的使用者保證。輸入的牌均為字符'1','2'..'9',大寫的'A','T','J','Q','K'。
示例
輸入: “77”、 “33”,返回:0
輸入: “77”、 “77”,返回:2
思路:1. 1vs2 or 2vs1 此情況只需判斷長(zhǎng)度即可得出結(jié)果,無需后續(xù)比較
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("比較的結(jié)果"+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,無法比較。為提供效率,能先搞定的搞定,這種情況就不需要執(zhí)行后面的了。
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,比較方式是一樣的。其實(shí)不用天括號(hào)
if(Math.abs(is1[0]-is2[0])==1) //有題目知,長(zhǎng)度為2肯定是對(duì)子情況
return is1[0]-is2[0]>0? 1:3;
else if(is1[0]==is2[0])
return 2;
else
return 0;
}
if(len1==3&&len2==3) //炸彈不可能相等,因?yàn)橐桓迸茮]有6個(gè)一樣的。
return is1[0]>is1[0]? 1:3;
if(len1==3&&len2<3||len1<3&&len2==3)
return len1==3? 1:3;
return 0;//其實(shí)測(cè)試用例應(yīng)該永遠(yuǎn)都不會(huì)執(zhí)行這一句。
}
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; // 超級(jí)笨蛋錯(cuò)誤!!!!! 若輸入9,'9'=57!!!!字符9對(duì)于的值不是數(shù)字9而是該字符本身對(duì)于的值。
value=Integer.parseInt(c+"") ;
break;
}
return value;
}
}
9. 矩陣轉(zhuǎn)置(20分)
問題描述:
將一個(gè)N*N矩陣的行列互換。 ·
要求實(shí)現(xiàn)函數(shù):
public String matrixTranspose (String inArr, int n)
【輸入】inArr: 輸入的字符矩陣
n: N*N矩陣的行數(shù)
【返回】轉(zhuǎn)置后的字符矩陣 注:
輸入輸出的矩陣都是以一維形式保存的二維數(shù)組,比如輸入為"1,2,3,4,5,6,7,8,9",實(shí)際上表示如下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"
注:筆者人為的把題目稍微添成了每項(xiàng)為字符串而不是字符。字符更簡(jiǎn)單,字符串時(shí)注意截取時(shí),13不是1,3
方法一:被題目忽悠的用了矩陣。就當(dāng)是熟悉下二維數(shù)組嘛
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){//要把字符串中的逗號(hào)去掉,不然逗號(hào)也是string的一個(gè)下標(biāo)值了,輸出時(shí)再加上就是咯
String[] ss=inarr.split(",");
String[][] css=new String[n][n];
int k=0;
for(int i=0;i<n;i++){//字符串轉(zhuǎn)換為二維數(shù)組
for(int j=0;j<n;j++){
css[i][j]=ss[k];
k++;
}
}
StringBuffer sb=new StringBuffer();
for(int i=0;i<n;i++){// 二維數(shù)組逆置
for(int j=0;j<n;j++){
sb.append(css[j][i]+",");//尾巴多了一個(gè),
}
}
return sb.substring(0, sb.length()-1);
}
}
方法二:更簡(jiǎn)單,完全不需矩陣。
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){//要把字符串中的逗號(hào)去掉,不然逗號(hào)也是string的一個(gè)下標(biāo)值了,輸出時(shí)再加上就是咯
String[] ss=inarr.split(",");
StringBuffer sb=new StringBuffer();
for(int i=0;i<n;i++){ //對(duì)于題目例子: 需要的下標(biāo)順序是 036147258
for(int j=i;j<ss.length;j+=n){
sb.append(ss[j]+",");//尾巴多了逗號(hào)
}
}
return sb.substring(0, sb.length()-1);//去掉尾巴逗號(hào)
}
}

10.路燈(20分)
某省會(huì)城市街道縱橫交錯(cuò),為了監(jiān)控路燈的運(yùn)行狀況,每條街道使用一個(gè)數(shù)字字符串標(biāo)識(shí)該街道上所有路燈的運(yùn)行狀況。
假設(shè)路燈只有如下3種狀態(tài)(分別用數(shù)字0, 1, 2標(biāo)識(shí),一盞路燈只對(duì)應(yīng)其中一種狀態(tài)):
0 標(biāo)識(shí)路燈熄滅;
1 標(biāo)識(shí)路燈開啟;
2 標(biāo)識(shí)路燈故障;
請(qǐng)根據(jù)輸入的字符串,找出該街道上連續(xù)的處于相同狀態(tài)的路燈的最大個(gè)數(shù)。若兩種狀態(tài)的路燈數(shù)量相同,則返回最先出現(xiàn)的路燈狀態(tài)。
輸入
街道上連續(xù)的路燈組成的狀態(tài)字符串。字符串中只包含數(shù)字,每個(gè)路燈的狀態(tài)為0,1,2中的一種狀態(tài)。如“1101”代表4盞路燈,第3盞路燈為熄滅狀態(tài),其它3盞為開啟狀態(tài)。
輸出
連續(xù)為相同狀態(tài)的路燈的最大數(shù)量;
上述路燈的狀態(tài);
要求:先輸出數(shù)量,再輸出狀態(tài),兩個(gè)整數(shù)間采用一個(gè)空格間隔。如輸出:
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";//這類題一定要注意最后全部相同的情況,即沒有再出現(xiàn)與之不同的,不然很容易死循環(huán)。
System.out.println("inarr---->"+s);
HWCompetition hw=new HWCompetition();
String result=hw.ludeng(s);
System.out.println("題目結(jié)果---->"+result);
}
public String ludeng(String s){//要把字符串中的逗號(hào)去掉,不然逗號(hào)也是string的一個(gè)下標(biāo)值了,輸出時(shí)再加上就是咯
char[] as=s.toCharArray();
int len=as.length;
int maxc=1;
// int mubiaobindex=0;//不要制造多余變量
// int mubiaovalue=as[0];
int bindex=0;//如果需要返回最大連續(xù)的第一個(gè)下標(biāo),如此時(shí)的6;若題目有此需求:則設(shè)置兩個(gè)變量:“每部分”的次數(shù)+首次出現(xiàn)的下標(biāo)。
char value=as[0];//若題目需要返回最大長(zhǎng)度部分的值即本題狀態(tài)的1
for(int i=0;i<len-1; ){
int count=1;//每次外層循環(huán)是把count令為1,開始新的計(jì)數(shù)
bindex=i;
value=as[i];
for(int j=i+1;j<len;j++){
if(as[i]!=as[j]){
i=j;
break;
}
else{
i++;//!!!!!!!!!!!如果后面沒有出現(xiàn)不同的;如果不加這一句,外層循環(huán)會(huì)一直執(zhí)行。
count++;
}
}
if(count>maxc){
maxc=count;
// mubiaobindex=bindex;
// mubiaovalue=value;
System.out.println("maxc--->"+maxc+" 起始下標(biāo)---->"+bindex+" 狀態(tài)---->"+value);
}
}
StringBuffer sb=new StringBuffer();
return sb.append(maxc+" ").append(value).toString();
}
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot注解@ConditionalOnClass底層源碼實(shí)現(xiàn)
這篇文章主要為大家介紹了SpringBoot注解@ConditionalOnClass底層源碼實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
javaBean的基礎(chǔ)知識(shí)及常見亂碼解決方法
這篇文章主要介紹了javaBean的基礎(chǔ)知識(shí)及常見亂碼解決方法的相關(guān)資料,需要的朋友可以參考下2017-03-03
如何使用Spring Security手動(dòng)驗(yàn)證用戶的方法示例
這篇文章主要介紹了如何使用Spring Security手動(dòng)驗(yàn)證用戶的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05
Java SpringBoot啟動(dòng)指定profile的8種方式詳解
這篇文章主要介紹了spring boot 如何指定profile啟動(dòng)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Springboot 如何關(guān)閉自動(dòng)配置
這篇文章主要介紹了Springboot 如何關(guān)閉自動(dòng)配置的操作,具有很好的開車價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
解決Mybatis的serverTimezone時(shí)區(qū)出現(xiàn)問題
這篇文章主要介紹了解決Mybatis的serverTimezone時(shí)區(qū)出現(xiàn)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09

