题解 | 用户分群
用户分群
https://www.nowcoder.com/practice/ba24c14adb424bd2b4888c70ddfe9568
import sys
import math
from collections import deque
#for line in sys.stdin:
#a = line.split()
#print(int(a[0]) + int(a[1]))
k = int(input())
kk=deque()#分组
kkk=[0]*k#同组个数
kk_num1=[float(0)]*k
kk_num2=[float(0)]*k
kk_num3=[float(0)]*k
matrix=[]#中心点
data=[]
for _ in range(k):
row=list(map(float,input().split()))
matrix.append(row)
#print(matrix)
n = int(input())#迭代次数
m = int(input())
for _ in range(m):
row=list(map(float,input().split()))
data.append(row)
#print(data)
for _ in range(n):#计算迭代
for i in range(len(data)):
d=float(0)
zubie=0
for j in range(k):
d1=pow((data[i][0]-matrix[j][0]),2)
d2=pow((data[i][1]-matrix[j][1]),2)
d3=pow((data[i][2]-matrix[j][2]),2)
d4= round(math.sqrt(d1+d2+d3),2)
#print(d4,i,j)
if d==0:
d=d4
elif d!=0 and d4<d:
d=d4
zubie=j
#print("gaibian")
#q,w=kk.pop()
#print(i,zubie)
kkk[zubie]+=1
kk_num1[zubie]+=data[i][0]#表示分到同一组的所有和
kk_num2[zubie]+=data[i][1]
kk_num3[zubie]+=data[i][2]
kk.append((i,zubie))
#遍历完之后,一共有i个数据点,且每个数据点后的j表示分的组类
for z in range(len(kkk)):
if kkk[z]>0:
matrix[z][0]=round(kk_num1[z] / kkk[z],2)#表示分到同一组的所有和的算术平均值
matrix[z][1]=round(kk_num2[z] / kkk[z],2)
matrix[z][2]=round(kk_num3[z] / kkk[z],2)
for i in range(k):
#print(matrix[i][0],matrix[i][1],matrix[i][2])
print(f'{matrix[i][0]:.2f}',f'{matrix[i][1]:.2f}',f'{matrix[i][2]:.2f}')
#print(matrix)
保留两位小数点('f{nums:.2f}')平方pow() 根号sqrt()
#python3#

查看21道真题和解析