奧運(yùn)比賽上,經(jīng)常聽到這么一句話,“去掉一個最高分和最低分,最終得分是……”,雖然我們不知道奧運(yùn)會上“最終得分”的計算過程,但在實(shí)際的生活中,我們也經(jīng)常遇到類似的問題,比如人員面試,比賽等等,一般情況下最終得分的計算方法都是去掉一個最高分和最低分的平均分。如果手動去計算,非常容易出錯,而且效率極低。
案例:如下圖,已經(jīng)登記了每位評委的分?jǐn)?shù),現(xiàn)在要求計算“最終得分”。
方法1:Sum+Max+Min函數(shù)法。
目的:計算選手的“最終得分”。
在目標(biāo)單元格中輸入公式:=(SUM(C3:G3)-MAX(C3:G3)-MIN(C3:G3))/3。
解讀:
1.這是常規(guī)的思維,也是用得最多的解決辦法,就是先計算出所有評委的總分,然后減去最高和最低的分?jǐn)?shù),然后除以“修正后”的評委數(shù)。
2.為了省去設(shè)置單元格格式的麻煩,也可以一次性保留兩位小數(shù),公式為:=ROUND((SUM(C3:G3)-MAX(C3:G3)-MIN(C3:G3))/3,2)。
方法二:Trimmean函數(shù)法。
1.功能及語法結(jié)構(gòu)。
功能:返回一組數(shù)據(jù)的修剪平均值。簡單理解就是從指定的數(shù)據(jù)中剔除指定的部分值,計算剩余部分的平均值。
語法結(jié)構(gòu):=Trimmean(數(shù)據(jù)區(qū)域,剔除比例)。參數(shù)“數(shù)據(jù)區(qū)域”為單元格區(qū)域或數(shù)組,“剔除比例”指剔除“數(shù)據(jù)區(qū)域”中極值的比例。兩個參數(shù)都是必須的。
目的:計算選手的“最終得分”。
方法:
在目標(biāo)單元格中輸入公式:=TRIMMEAN(C3:G3,2/5)。
解讀:
1、“剔除比例”2/5中2的含義為“去除一個最高分和最低分”,5為評委總?cè)藬?shù)。
2、如果要保留2位小數(shù),可以嵌套Round函數(shù),依次到位,公式為:=ROUND(TRIMMEAN(C3:G3,2/5),2)。
結(jié)束語:
對于手工計算“最終得分”,上文中的2種方法,效率極高,而且易學(xué)易理解,易用。如果親有更好的關(guān)于計算“最終得分”的方法,可以在留言區(qū)留言討論哦!
用Excel處理數(shù)據(jù)的過程中,我們比較擔(dān)心的一個問題就是大量數(shù)據(jù)中出現(xiàn)許多的重復(fù)數(shù)據(jù)內(nèi)容。今天我們就來學(xué)習(xí)三個最簡單的查找刪除重復(fù)數(shù)據(jù)的方法。
案例說明:如下圖,我們需要核對剩余庫存單號中是否還存在已經(jīng)出庫的單號。我們需要快速將對應(yīng)的單號找出并刪除。
函數(shù)公式:=VLOOKUP(A2,D:D,1,0)
函數(shù)解析:
1、這里我們通過vlookup函數(shù)匹配查找的方式來進(jìn)行查詢。當(dāng)查詢到這個值的時候會返回對應(yīng)的值,查詢不到重復(fù)的就會顯示從錯誤值;
2、第一參數(shù)為我們要找的值,第二參數(shù)為需要核對的源數(shù)據(jù)區(qū)域;第三參數(shù)我們設(shè)置為1,這樣的話當(dāng)數(shù)據(jù)區(qū)域中有這個值的時候,它會自動返回;第四參數(shù)0位精確查找。
函數(shù)公式:=COUNTIF(D:D,A2)
函數(shù)解析:
1、這里用Countif函數(shù)來處理,原理就是當(dāng)出現(xiàn)重復(fù)的單號時,統(tǒng)計的結(jié)果個數(shù)會大于0;
2、第一參數(shù)D:D代表我們需要核對的出庫單號;第二參數(shù)A2代表我們核對的當(dāng)前庫存單號。當(dāng)結(jié)果返回大于0時,就會顯示大于1,出現(xiàn)兩次重復(fù)會顯示為2。
操作方法:
1、選擇你需要核對的數(shù)據(jù)區(qū)域,選中庫存單號所在列和出庫單號所在列;
2、點(diǎn)擊菜單欄:開始—條件格式—突出顯示單元格規(guī)則—重復(fù)值。這樣即可快速將兩列數(shù)據(jù)中重復(fù)的內(nèi)容特殊標(biāo)注出來。
現(xiàn)在你學(xué)會如何快速核對刪除重復(fù)數(shù)據(jù)了嗎?
到加減乘除運(yùn)算,只要學(xué)過乘法口訣的應(yīng)該沒有不會算的吧。
什么一一得一,一二得二.。。。信手拈來,簡直不要太容易。
難一點(diǎn)的無非也就是這四種運(yùn)算符號組合起來而已,但是如此簡單的運(yùn)算對于計算機(jī)而言,真的不是一件輕松的活啊。
就運(yùn)算速度上,計算機(jī)遠(yuǎn)超你我。
就運(yùn)算簡易程度而言,你我勝過計算機(jī)。
為什么這么說呢?
下面舉個栗子,求一個算式(也叫中綴表達(dá)式)結(jié)果:5+(6-3)*4+8/2=?
對于我們而言,這個算式輕松的得到答案是21。那么計算機(jī),又是如何得出這個結(jié)果的呢?
談到這個問題,首先我們應(yīng)該了解兩個知識:棧(stack)和后綴表達(dá)式。
什么是棧?
棧又名堆棧,它是一種運(yùn)算受限的線性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進(jìn)棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
可以這么理解棧:棧相當(dāng)于一個沒有瓶蓋的空瓶子。向瓶子內(nèi)放入東西叫做入棧,從瓶子里倒出東西叫做出棧。瓶底叫棧底,瓶口叫棧頂。雖然不是很恰當(dāng),但是這么理解還是可以的。
什么是后綴表達(dá)式?
后綴表達(dá)式也叫逆波蘭式。它是波蘭的邏輯學(xué)家盧卡西維奇(Lukasiewicz)發(fā)明的一種表示表達(dá)式的方法。這種表示方式把運(yùn)算符寫在運(yùn)算對象的后面,例如,把a(bǔ)+b寫成ab+,所以也稱為后綴式。這種表示法的優(yōu)點(diǎn)是根據(jù)運(yùn)算對象和算符的出現(xiàn)次序進(jìn)行計算,不需要使用括號,也便于用械實(shí)現(xiàn)求值。對于表達(dá)式x:=(a+b)*(c+d),其后綴式為xab+cd+*:=。
計算機(jī)對上述運(yùn)算表達(dá)式的過程大致分為兩個步驟:
①將中綴表達(dá)式轉(zhuǎn)換為后綴表達(dá)式
②通過執(zhí)行后綴表達(dá)式得出結(jié)果
首先介紹轉(zhuǎn)換為后綴表達(dá)式的過程。轉(zhuǎn)換的過程中遵循一個規(guī)則(符號進(jìn)棧,數(shù)字輸出):
從左到右遍歷中綴表達(dá)式的每個數(shù)字和符號
如果是數(shù)字就加入后綴表達(dá)式
如果是符號,判斷括號:如果是左括號“(”,直接入棧;是右括號“)”,則依次從棧中取出運(yùn)算符加入后綴表達(dá)式中,直至取到“(”后停止,并且將棧中“(”刪除
如果是括號以外的其他運(yùn)算符,判斷這個運(yùn)算符和棧頂符號優(yōu)先級:其優(yōu)先級低于或者等于棧頂符號則先將棧中符號依次彈出加入后綴表達(dá)式后自身入棧,否則自身就直接入棧
直到遍歷中綴表達(dá)式結(jié)束,得到后綴表達(dá)式
詳細(xì)過程:
將5輸出,+進(jìn)棧; 目前輸出為5,棧中為+;
遇到(,進(jìn)棧; 目前輸出為5,棧底到棧頂依次為+ (;
將6輸出,減號進(jìn)棧,3輸出; 目前輸出為5 6 3,棧底到棧頂依次為+ (-;
遇到),去匹配(,棧頂符號出棧,直到(出棧; 目前輸出為5 6 3-,棧中為+;
遇到乘號進(jìn)棧,6輸出;目前輸出為5 6 3 - 4,棧底到棧頂依次為+ *;
遇到+,由于+的優(yōu)先級比*低,所以棧中所有元素都出棧,自身進(jìn)棧; 目前輸出為5 6 3 - 4 * +,棧底到棧頂依次為+;
遇到10輸出,除號進(jìn)棧;目前輸出為5 6 3 - 4 * + 8,棧底到棧頂依次為+/;
遇到2輸出;目前輸出為5 6 3 - 4 *+ 8 2,棧底到棧頂依次為+/;
表達(dá)式結(jié)束,棧中全部依次出棧,最終為5 6 3 - 4 * + 8 2 / +;
其次是后綴表達(dá)式的執(zhí)行過程。其執(zhí)行過程也遵循一個規(guī)則:
從左向右遍歷后綴表達(dá)式的每個數(shù)字和符號,
遇到是數(shù)字就進(jìn)棧
遇到是符號,就將處于棧頂兩個數(shù)字出棧,三者進(jìn)行運(yùn)算得到的運(yùn)算結(jié)果進(jìn)棧, 直到最后獲得運(yùn)算結(jié)果
5 6 3 依次進(jìn)棧,然后遇到了減號;此時棧底到棧頂依次為5 6 3;
處于棧頂?shù)?和6出棧,相減得到3,將3進(jìn)棧;此時棧底到棧頂依次為5 3;
4進(jìn)棧,然后遇到乘號;此時棧底到棧頂依次為5 3 4;
處于棧頂?shù)?和3出棧,相乘得到12,將12進(jìn)棧;此時棧底到棧頂依次為5 12;
遇到加號,處于棧頂?shù)?2和5出棧,加一下得到17,將17進(jìn)棧;此時棧里只有一個17;
8 2依次進(jìn)棧,然后遇到除號;此時棧底到棧頂依次為17 8 2;
處于棧頂?shù)?和8出棧,相除得到4,將4進(jìn)棧;此時棧底到棧頂依次為17 4;
遇到加號,處于棧頂?shù)?和17出棧,想加得到21,將21進(jìn)棧;
表達(dá)式結(jié)束,輸出結(jié)果21,棧變空。
看完感覺怎樣?
是不是很復(fù)雜?
其實(shí)還好吧,233。。。
有的小伙伴可能又要吐槽了,知道這些過程有個屁用,實(shí)際工作中會讓你寫這個過程么?
是的,工作可能不需要你了解底層如何計算,你需要告訴計算機(jī)這些數(shù)字和運(yùn)算符,剩下的就等著拿到結(jié)果就ok。
我想說,編程重要的不是你能不能完成單純的開發(fā)任務(wù),而是你能不能從任務(wù)中看到背后的編程思想。
思想決定高度!
思想有多遠(yuǎn),你就能走多遠(yuǎn)~~~~~~~~