小公尺OJ程式設計題 不一樣的排序

2021-09-20 10:30:50 字數 2134 閱讀 6968

有一天利姆魯想教他的哥布林部下學數學,因為他之前教過因子,現在想考考他們。

利姆魯問現在有 n 個數,需要用因子個數的多少進行排序,因子個數多的排在後面,因子個數少的排在前面,如果因子個數相同那麼就比較這個數的大小,數大的放在後面,數小的放在前面。現在讓你說出排序之後第 k 個位置的數字是多少。

輸入
第 1 個整數為整數 k,1 ≤ k ≤ 10^6

第 2 個為整數 nn,表示數字的數量,n < 10^7

接下來有 n 個整數,每個數的大小不超過 10^6

輸出
輸出排序之後的第 k 位置的數值。

輸入樣例
4 6 1 2 3 4 5 6
輸出樣例
5
import cmath

def count_of_yinshu(num):

if num == 1:

return 1

count=2

sqrt=int(abs(cmath.sqrt(num)))

if sqrt*sqrt==num:

count=count+2

flag=0

if sqrt==abs(cmath.sqrt(num)):

flag=0

else:

flag=1

for i in range(2,sqrt+flag):

for j in range(sqrt,num):

if i*j==num:

count = count + 2

return count

def compare_yinshu(num1,num2):

if count_of_yinshu(num1) < count_of_yinshu(num2):

return "<"

elif count_of_yinshu(num1) > count_of_yinshu(num2):

return ">"

else:

if num1 < num2:

return "<"

else:

return ">"

import sys

for line in sys.stdin:

input = line.strip().split()

for i in range(len(input)):

input[i]=int(input[i])

k=input[0]

del input[0]

del input[0]

for i in range(len(input) - 1):

min = i

for j in range(i + 1, len(input)):

if compare_yinshu(input[min], input[j]) == ">":

min = j

temp = input[min]

input[min] = input[i]

input[i] = temp

print(input[k-1])

#include

//#include

#include

using namespace std;

intcount_of_yinshu

(int num)

}return count;

}char

compare_yinshu

(int num1,

int num2)

intmain()

temp = input[min]

; input[min]

= input[i]

; input[i]

= temp;

} cout << input[k -1]

;getchar()

;getchar()

;getchar()

;return0;

}

不一樣的排序

不一樣的排序 序號 128 難度 一般 時間限制 1000ms 記憶體限制 32m 描述有一天利姆魯想教他的哥布林部下學數學,因為他之前教過因子,現在想考考他們。利姆魯問現在有 n 個數,需要用因子個數的多少進行排序,因子個數多的排在後面,因子個數少的排在前面,如果因子個數相同那麼就比較這個數的大小...

不一樣又不一樣的 木板接水

空地上豎立著n個從左到右排列的木板,它們可以把水擋住,但溢位最邊上木板的水將會流到空地上。已知木板間距都是單位1,現給定每個木板的高度,請求出總共能接住的水量?說明一點,這裡只考慮間距 寬度 和高度,不考慮第三個維度,因此水量是平方單位。木板高度分別是2,1,3,那麼我們可以接住2 2 4平方單位的...

不一樣的氣泡排序

排序思路 迴圈取出最大值放在陣列的最後,最小值放到最前。上 void bubblesort5 int arr 選出最大的數放到陣列左邊 if arr i min if x1 right 1 x2 left t1 arr right 1 快取右邊界值 t2 arr left 快取左邊界值 arr ri...