**
1.數(shù)組排序
**
對(duì)一個(gè)數(shù)組進(jìn)行排序,排序需要遵守一些規(guī)則:
?先對(duì)數(shù)組從左到右,相鄰元素進(jìn)行比較,如果第一個(gè)比第二個(gè)大,就交換它們,進(jìn)行一個(gè)升序排序;
?再對(duì)數(shù)組從右到左,相鄰元素進(jìn)行比較,如果第一個(gè)比第二個(gè)小,就交換它們,進(jìn)行一個(gè)降序排序;
?以此類推,持續(xù)的、依次的改變排序的方向,并不斷縮小沒(méi)有排序的數(shù)組范圍;
按照這種規(guī)則依次給整個(gè)數(shù)組排序,并將排序過(guò)程打印到控制臺(tái)。
樣例:
比如給出一組數(shù)據(jù) 4,1,3,5,2 ,排序過(guò)程如下:
4 1 3 5 2
1 4 3 5 2
1 3 4 5 2
1 3 4 2 5
1 3 2 4 5
1 2 3 4 5
最后得到結(jié)果: 1 2 3 4 5 。
編程要求
請(qǐng)?jiān)谟覀?cè)編輯器中填充代碼,補(bǔ)全 sort(self,xlist) 函數(shù),實(shí)現(xiàn)指定的排序功能,并打印出排序過(guò)程,函數(shù)參數(shù)說(shuō)明如下:
xlist :待排序的數(shù)組
注:不需排序的數(shù)組(如: 1 2 3 ),直接打印原數(shù)組。
思路:雞尾酒排序
Java
public void sort(Integer[] arr){
/********* Begin *********/
int i=0;
boolean flag = false,flag1,flag2;
for(i = 0; i < arr.length-1; i++){
if(arr[i] > arr[i+1])
flag = true;
}
if(!flag)
{
for(int j = 0; j < arr.length; j++)
System.out.print(arr[j] + " ");
System.out.println();
}
else{
while(flag) {
flag1 =false;flag2 = false;
for(i = 0; i < arr.length-1; i++){
if (arr[i+1] < arr[i]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
flag1 = true;
for(int j = 0; j < arr.length; j++)
System.out.print(arr[j] + " ");
System.out.println();
}
}
for(i = arr.length-1; i > 0; i--){
if (arr[i] < arr[i-1]){
int temp = arr[i];
arr[i] = arr[i-1];
arr[i-1] = temp;
flag2 = true;
for(int j = 0; j < arr.length; j++)
System.out.print(arr[j] + " ");
System.out.println();
}
}
flag = flag1 || flag2;
}}
/********* End *********/
}
}
Python
# -*- coding: utf-8 -*-
class Task:
def sort(self,xlist):
#********* Begin *********#
the_len = len(xlist)
flag = False
for i in range(the_len-1):
if(xlist[i] > xlist[i+1]):
flag = True
if(not flag):
print(" ".join(str(k) for k in xlist))
else:
while 1:
flag = False
for i in range(the_len-1):
if xlist[i] > xlist[i+1]:
xlist[i], xlist[i+1] = xlist[i+1], xlist[i]
flag = True
print(" ".join(str(k) for k in xlist))
j = the_len-1
while j > 0:
if xlist[j-1] > xlist[j]:
xlist[j], xlist[j-1] = xlist[j-1], xlist[j]
flag = True
print(" ".join(str(k) for k in xlist))
j -= 1
if flag == False:
break
#********* End *********#
2.病毒區(qū)域個(gè)數(shù)
某地區(qū)爆發(fā)病毒,給定一個(gè)矩陣, x 代表隔離墻, o 代表病毒,病毒區(qū)域是由它水平方向或垂直方向上相鄰的病毒連接而成,斜角連接不會(huì)構(gòu)成病毒區(qū)域。你要計(jì)算出矩陣中有幾個(gè)病毒區(qū)域(假設(shè)矩陣周邊是被隔離墻包圍的)。
編程要求
對(duì)輸入的矩陣進(jìn)行計(jì)算,返回“病毒區(qū)域”的個(gè)數(shù),函數(shù)參數(shù)說(shuō)明如下:
n :矩陣的行
m :矩陣的列
area :待計(jì)算的矩陣
樣例:
輸入:
4 5
x o x x x
x x x o x
x x o o x
x x x x x
輸出: 2
思路一:
除最后一行最后一列,按行按列循環(huán)找到是‘o’的位置[i][j] ,然后判斷下方[i+1][j],右方[i][j+1]是否滿足條件,最后一行只查找右方,最后一列只查找右方。
# -*- coding: utf-8 -*-
class Task:
def virusArea(self,n,m,area):
#********* Begin *********#
count = 0
for i in range(n-1):
for j in range(m-1):
if area[i][j] == 'o':
if area[i+1][j] == 'o':
count += 1
if area[i][j+1] == 'o':
count += 1
j += 1
for i in range(n-1):
if area[i][j] == 'o':
if area[i+1][j] == 'o':
count += 1
i += 1
for j in range(m-1):
if area[i][j] == 'o':
if area[i][j+1] == 'o':
count += 1
return count
#********* End *********#
思路二:
每?jī)尚邪戳斜闅v是否均為‘o’
每?jī)闪邪葱斜闅v是否均為‘o’
# -*- coding: utf-8 -*-
class Task:
def virusArea(self,n,m,area):
#********* Begin *********#
count = 0
for i in range(n-1):
for j in range(m):
if area[i][j] == area[i+1][j] == 'o':
count += 1
j += 1
i += 1
for j in range(m-1):
for i in range(n):
if area[i][j] == area[i][j+1] == 'o':
count += 1
i += 1
j += 1
return count
#********* End *********#
3.最長(zhǎng)凹谷
有一維數(shù)組 X = [8,5,1,6,7,7,3,5] ,我們把它畫(huà)到坐標(biāo)系中,其中凹下去的部分我們稱為 X 數(shù)組的凹谷數(shù)組 Y ,其中凹陷的長(zhǎng)度即為凹谷數(shù)組的長(zhǎng)度( Y 的長(zhǎng)度大于 3 ),其中持平的部分不計(jì)入凹谷數(shù)組的長(zhǎng)度。如, X 有兩個(gè)凹谷數(shù)組 Y1 = [8,5,1,6,7] 和 Y2 = [7,3,5] ,長(zhǎng)度分別為 5 和 3 。我們則需要返回這個(gè)數(shù)組中的最長(zhǎng)凹谷數(shù)組的長(zhǎng)度,即 5 ,如果數(shù)組中不含凹谷,則返回 0 。
編程要求
對(duì)輸入的數(shù)組進(jìn)行判斷,返回最長(zhǎng)“凹谷”的長(zhǎng)度,函數(shù)參數(shù)說(shuō)明如下:
X :待判斷的數(shù)組
思路:尋找一個(gè)小凹點(diǎn),然后逐步往前往后擴(kuò)大范圍。
# -*- coding: utf-8 -*-
class Task:
def concaveValley(self,X):
#********* Begin *********#
count = 0
for i in range(1,len(X)-1):
index1 = 0
index2 = 0
if X[i]
0 and X[index1-1]>X[index1]:
index1 -= 1
while index2
X[index2]:
index2 += 1
if index2-index1+1 > count:
count = index2-index1+1
return count
#********* End *********#
4.愛(ài)心
畫(huà)兩個(gè)愛(ài)心圖案,輸入數(shù)字 1 ,出現(xiàn)一個(gè)鏤空的心形;輸入數(shù)字 2 ,出現(xiàn)一個(gè)由字符串 I love you! 組成的心形。
# -*- coding: utf-8 -*-
class Task:
def love(self,n):
#********* Begin *********#
letterlist = []#letterlist是所有打印字符的總list,里面包含y條子列表list_X
for y in range(12, -12, -1):
list_X = []#list_X是X軸上的打印字符列表,里面裝著一個(gè)String類的letters
letters = ''#letters即為list_X內(nèi)的字符串,實(shí)際是本行要打印的所有字符
for x in range(-30, 30):#*是乘法,**是冪次方
expression = ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3
if expression <= 0:
letters += '$'
else:
letters += ' '
list_X.append(letters)
letterlist += list_X
print('\n'.join(letterlist))
#********* End *********#
# -*- coding: utf-8 -*-
class Task:
def love(self,n):
#********* Begin *********#
item = 'I love you!'
letterlist = []#letterlist是所有打印字符的總list,里面包含y條子列表list_X
for y in range(12, -12, -1):
list_X = []#list_X是X軸上的打印字符列表,里面裝著一個(gè)String類的letters
letters = ''#letters即為list_X內(nèi)的字符串,實(shí)際是本行要打印的所有字符
for x in range(-30, 30):#*是乘法,**是冪次方
expression = ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3
if expression <= 0:
letters += item[(x-y) % len(item)]
else:
letters += ' '
list_X.append(letters)
letterlist += list_X
print('\n'.join(letterlist))
#********* End *********#
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
