有一天利姆魯想教他的哥布林部下學數學,因為他之前教過因子,現在想考考他們。輸入利姆魯問現在有 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...