Python|代表値


代表価格
1.質問🧐
N名の学生の数学の点数をあげますプログラムを書き出して、N名の学生の平均数(小数第一位四捨五入)を求めて、そしてN名の学生の中で最も平均数に近い学生が何位であるかを印刷します.
平均成績に最も近い点数が複数ある場合は、まず点数の高い学生の番号を答え、点数の高い学生が複数いる場合は点数の高い学生の番号を答えます.
2.入力
1行目は自然数N(5<=N<=100)を与え,2行目は学生毎の数学点数N個の自然数を与える.学生の番号は前から1からNまでです.
10
45 73 66 87 92 67 75 79 75 80
3.出力
最初の行は、平均と平均に最も近い学生番号を出力します.
平均値は小数第1位から四捨五入する.
74 7
4.問題を解くポイント🔍
正直に言って、この問題はただ考えてみるだけで、解決するのは少し難しいようで、ほほほ
point 1. 学生の点数と平均点の距離
学生10名
45736687926775797580=>学生の点数
👉 平均74点で、平均に最も近い点数は73点(2回)、75点(7回)、75点(9回)だった.このうち点数の高い75(7番)、75(9番)が答えかもしれませんが、75点は2人なので、学生番号の早い7番が答えです.
「무무」問題の核心は絶対値| 학생 점수-평균 |である.つまり、平均点数と学生点数の距離が重要です.
  • の平均成績と学生点数の距離が大きいほど、平均成績に近づかない.
  • の平均成績と学生成績の距離が短いほど、平均成績に近づく.
  • point 2. |平均-学生の点数|の最小値を求めます
    グローバル最小値を求める論理は引き続き使用されます.
    min=float('inf') # 최소값 
    min_idx = 0 # 최소값 인덱스
    for idx, n in enumerate(num):
        if n < min:
            min=n
            min_idx=idx
    逆に、最大値を求める論理であり、逆も同様である.
    上記の論理では、|平均-学生点数|が増加しています.
    ave = round(sum(a)/n)
    min = 2147000000 # int 4바이트에서 가장 큰 수 
    
    for idx, x in enumerate(a) : 
    	tmp=abs(x-ave) # (학생 점수 - 평균)의 절대값, 학생점수와 평균과의 거리 
        
        # |학생 점수 - 평균| 의 최소값 구하기 = 평균과 가장 가까운 값
        if tmp < min: 
        	min=tmp
            score=x #학생점수 최소값 저장할 변수
        	res=idx+1 # 인덱스를 저장할 변수, 1번부터 시작해야하므로 
    5.コード💻
    1)解釈
    # N = int(input())
    # num = list(map(int, input().split()))
    N = 10
    num = [45,73,66,87,92,67,75,79,75,80]
    
    sum = 0
    
    # 합 구하기
    for n in num:
        sum += n
    
    # 평균 구하기 - 반올림해야함
    avg = round(sum / len(num))
    
    min=float('inf')
    for idx, n in enumerate(num):
        dis = abs(n-avg)
        if dis < min:
            min=dis
            score=n  # 제일 차이가 작은 학생점수
            min_idx=idx+1 # 제일 차이가 작은 인덱스
    
        elif dis == min:
            if n > score:
                score=n
                min_idx=idx+1
    
    print(avg,min_idx)
    2)模範解答
    N = int(input())
    a = list(map(int, input().split()))
    
    ave = round(sum(a)/n)
    min = 2147000000 # int 4바이트에서 가장 큰 수 
    
    for idx, x in enumerate(a) : 
    	tmp=abs(x-ave) # (학생 점수 - 평균)의 절대값, 학생점수와 평균과의 거리 
        
        # |학생 점수 - 평균| 의 최소값 구하기 = 평균과 가장 가까운 값
        if tmp < min: 
        	min=tmp
            score=x #학생점수 최소값 저장할 변수
        	res=idx+1 # 인덱스를 저장할 변수, 1번부터 시작해야하므로 
        
        # 평균과 가장 가까운 값 중에서 73, 75 둘 다 평균 74와 거리가 1
        elif tmp == min: 
        	if x > score: # 학생점수 최대값 구하기 : 75 > 73
                score=x # 학생점수 최대값 75 저장
                res=idx+1 # 학생점수 최대값 인덱스
    
    print(ave, res)
       
    6.Pythonの文法を覚える🤩
    1.sum()関数
    sum():リスト内のすべての数値の関数を追加します.
    文のため、リストの数字を一つ一つ足す必要はありません.
    こんな簡単な方法があるのに、どうして問題を解くときに思い出せないのですか.🤣🤣
    2.round()関数
    round(数値):小数第1位から四捨五入する関数
    round(数字,2):小数第3位から四捨五入する関数
    round(数値、-1):1日から四捨五入する関数
    3部
    //:除算時にシェアを求める
    問題はありませんでしたが、忘れないように書き直しました.
    4.列挙()関数
    enumerate() : for idx, x in enumerate(a)
  • idx:aリストのインデックス
  • x:aリストの値
    =>最大値と最小値を求めるために使用します.
  • 5.abs()関数:絶対値
    abs():絶対値関数
    韓国情報