Python來做應用題及思路

来源:http://www.cnblogs.com/cookie1026/archive/2016/12/04/6131969.html
-Advertisement-
Play Games

Python來做應用題及思路 最近找工作頭疼沒事就開始琢磨python解應用題應該可以,順便還可以整理下思路當然下麵的解法只是個人理解,也歡迎大佬們給意見或者指點更好的解決辦法等於優化代碼了嘛,也歡迎大家出點小題目做也可以,如果可以我也會定期專門來做應用題(你弟弟或者你表弟或者外甥等來問應用題在也不 ...


Python來做應用題及思路

最近找工作頭疼沒事就開始琢磨python解應用題應該可以,順便還可以整理下思路當然下麵的解法只是個人理解,也歡迎大佬們給意見或者指點更好的解決辦法等於優化代碼了嘛,也歡迎大家出點小題目做也可以,如果可以我也會定期專門來做應用題(你弟弟或者你表弟或者外甥等來問應用題在也不用算了,把思路和答案給他讓他自己一邊研究去。)好了先來看如下題目:

1.firstblood題目一:

55名學生圍成一個圓圈站好,並按照順時針的方向依次編號1~55。然後1開始報數,隔一個人3號繼續報數,接著是5號,7號……每一輪中,沒有報數的同學都走出隊伍,知道剩下最後一個人。請問最後一個站在隊伍中的人是幾號?

首先來聊聊題目中的信息提取也就是程式已知的參數,55個學生可以當一個列表,報數是1,3,5,7隔著報數,偶數位的都被排除,一輪排除後剩下的等於是接到前面列表結束位置的數55繼續排除,這裡要提醒前面的55這時候就是剩下的第一位,那麼數字1就是第二位,等於我們要把每次迴圈的第一位給排除掉,才能無縫銜接,只要能理解這個很重要的一點這程式就通了。話不多說上代碼了:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

students = [x for x in range(1,56)] #生成學生1到55個學生列表
print students             #列印出來後面對比

def leave(team):           #定義函數,因為題目剩下的學生還要繼續所以用遞歸的方式
    spare = []             #臨時創庫用於存放每次報數後剩下的學生
    if len(team)>1:        #判斷這個隊列的長度不能小於1避免無限遞歸
        for i in range(len(team)+1): #記住這裡要的是列表的下標偶數而不是數字偶數(留給你們自己思考)
            if i==1:       #重點中的重點無縫連接55後面下次迴圈1等於2的位置所以直接排除
                continue
            if i%2==0:     #隊列中偶數下標的人也就是1,3,5中間的2,4排除掉
                continue
            else:          #前面排除後剩下的學生存放到臨時倉庫
                spare.append(team[i-1])       
        print spare        #列印後面銜接的剩下學生
        if len(spare)>2:   #判斷到最後只要兩位就是接可以得出結果(由於上面第一位就直接排除的原因)
            leave(spare)   #迭代函數再次排除偶數位置的學生
        else:
            print spare[1]              #最後剩下兩個人時其實第一個人就直接排除剩下就是最後一個報數的人
    else:
        print "Who lies!!!"             #如果沒人就列印誰亂報數

leave(students)

程式思路是:首先要迴圈接力報數,然戶要遞減人數我這裡就用遞歸的方法,需要遞減偶數位置,我這裡用列表下標方式對應位置(偶數出列),然後限定條件,就是找到剩餘幾個人結束,由於每次第一個人直接排除所以到剩下兩個人時排除第一個位置後就是答案。下麵是結果:


 

2.double kill題目二

有一個監獄犯人吃飯時,如果3個人坐一桌則餘2人,5個人坐一桌則餘4,7個人坐一桌則餘6人,9個人坐一桌則餘8人,11個人坐一桌正好坐滿,問一共有多少犯人?

還是來先提取題目中的參數信息,如果關鍵字可以看成程式中的條件if對待,總數X%3=2,X%5=4.......X%9=8..X%11=0,其實這寫都是條件,註意的是犯人的總數是要同時滿足這幾個條件,而不是滿足其中一個。是不是思路很清晰了我們可以用程式的and方法就是條件全滿足時執行。來看看代碼:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

'''
1,首先我們不知道這個數,所以可以用X未知數來表示
2,估計一個範圍,因為這個數字不是唯一的,答案也不是唯一的除非是選擇題目
3,我會用兩種寫法來解答,各位自己取捨理解好用就行。
'''

for x in range(10000):
    if x%3==2 and x%5==4 and x%7==6 and x%9==8 and x%11==0:
        print x,        
print

print [x for x in range(10000) if x%3==2 and x%5==4 and x%7==6 and x%9==8 and x%11==0]

是不是很簡單隻用把條件放去迴圈內部,程式會自己判斷取值,這裡我定義的範圍是1萬內滿足條件的輸出,上面常用的for迴圈寫法,下麵就是列表解析式,大家覺得那種好理解就用哪種吧!!!來看結果如下(有3個數滿足條件):

 


 

3.triple kill題目三:

兩火車相距10千米,A火車每小時1千米速度前行,B火車每小時2千米速度前行,求B幾小時後追上A?

首先參數是A的長度是10千米,B為0千米,然後計算小時用一個計數器初始為0,然後要用到迴圈A每次加1千米,B每次加2千米,計數器來計算迴圈次數也就是幾小時後追上A火車。代碼如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

A = []
for i in range(10):                  #初始化一個A已經跑了個距離
    A.append("1")                    #用1表示每小時走了1千米
print A                              #列印一個原始數據
print "--------------分割線-------------------"
B = []                              #初始化B列車
count = 0                           #小時計數器統計用了幾小時
for h in range(100):               #估計範圍
    if len(A)!=len(B):              #當A走的範圍不等於B走的範圍時
        A.append("1")               #A每次走1千米
        B.append("2")               #B每次走2千米走了兩次
        B.append("2")
        count+=1                    #每次執行就代表用了一小時所以要加上
    elif len(A)==len(B):            #當A走的距離等於B走的距離時
        print "追上了A"             #提醒已經追上A
        break                       #退出迴圈
    print A                         #每次列印走的距離
    print B                         #同上
print "B追上A花了%d小時"%count

基本都在註釋上面,很容易理解,是不是覺得很有趣,用python來做應用題鍛煉思路很好的方法,可以鍛煉對問題的分析及處理過程。

好了最後還是感謝觀看,下次再見!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java調優經驗談 對於調優這個事情來說,一般就是三個過程: 性能監控:問題沒有發生,你並不知道你需要調優什麼?此時需要一些系統、應用的監控工具來發現問題。 性能分析:問題已經發生,但是你並不知道問題到底出在哪裡。此時就需要使用工具、經驗對系統、應用進行瓶頸分析,以求定位到問題原因。 性能調優:經過 ...
  • volatile在Java記憶體模型(JMM)中,保證共用變數對所有線程可見,但不保證原子性。volatile語義是同步,通過共用變數的方式,完成線程間的通信。 ...
  • 字典由一對key:value 組成的 python中常用且重量級的數據類型 1. key , keys, values 2.字典的查詢 dir[index], dir.get[index] 3.字典增加/改變元素,直接索引,賦值即可, 有這個key則更改, 無這個可以則增加 4.刪除字典的元素: d ...
  • 一、使用new和delete時,應遵循以下規則: 1、不要使用delete來釋放不是new分配的記憶體。 2、不要使用delete釋放同一個記憶體塊兩次。 3、如果使用new[]為數組分配記憶體,則應使用delete[]來釋放。 4、如果使用new[]為一個實體分配記憶體,則應使用delete(沒有方括弧) ...
  • 1.支付準備 2.支付方法 3.回饋方法 當支付成功時,易寶會訪問這裡用兩種方法訪問:1. 引導用戶的瀏覽器重定向(如果用戶關閉了瀏覽器,就不能訪問這裡了)2. 易寶的伺服器會使用點對點通訊的方法訪問這個方法。(必須回饋success,不然易寶伺服器會一直調用這個方法) 4.pay.jsp paym ...
  • 3.查詢訂單詳細信息 OrderServlet desc.jsp 4.取消訂單、確認收貨 ...
  • 在構造器中可以調用本類的其他重載構造器,不能使用構造器名稱來調用另一個構造器,而是應該使用Java特定的this(….)來調用。 this(….)方法必須出現在構造器中的第一行,用來調用其他重載構造器。調用時參數必須嚴格匹配。 這種調用方式的優點在於一個構造器可以不必重覆編寫其他構造器中已有的代碼, ...
  • 1. 非註解方式 1.1 處理器適配器 上一節中使用的處理器適配器是:org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter。即: SimpleControllerHandlerAdapter適配器能執行實現了Contro ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...