題目描述基礎:一棟10層的大樓(樓層編號1-10),設有一臺無限載重的電梯,初始時電梯停在1層。電梯移動1層的耗時爲1,在某一層停靠的耗時爲1(時間初始爲0)。爲了使得乘客等待的時間(電梯在目的層的停靠時刻 - 乘客發出請求時刻)總和最小,請你編寫一個程序來進行電梯調度。html
本次做業是在上一次的電梯調度的代碼上進行改善迭代,不只加入新的功能,也對程序的輸入輸出提出了新的要求。
要求
----------
1、 輸入從文件讀取,輸出是寫入文件。git
你們在學習 C 語言的時候,應該明白了控制檯程序的輸入和輸出。但文件操做每每是以前的課程中被忽略的一個部分,你們有沒有試過「若是我要將程序的輸出保存下來」、「若是我要從一個文件中得到輸入」這些實操的環節呢?若是沒有,如今是一個再好不過的學習機會,來吧,learning by doing!github
要求:輸入輸出改爲文件輸入輸出操做。輸入文件的文件名爲 input.txt 裏面保存着輸入樣例,一個輸入爲一行,輸入的格式見做業的第二條要求。編程
例如:數組
0 1 5
2 2 5
程序輸出每次對應的決策,每一行的輸出格式爲 xx時,停靠在x樓。輸出在文件名爲output.txt的文件中。編程語言
2、此次的乘客再也不像上一次做業那樣只會去頂樓或者是 1 樓了,如今要使咱們的程序功能更加貼近現實。學習
迭代:乘客會前往任意一層,請修改程序代碼並實現。天然,輸入請求就變爲了:每一個請求一行,格式爲 請求時刻 起始樓層數 去往樓層 。一樣,你們也須要本身構造測試樣例,讓這臺「電梯」儘量好的工做。構造五個輸入樣例,最後輸出完成五個請求(全部乘客都到達目的地)後,各乘客的等待時間總和。輸入輸出的詳細例子能夠參加上一次做業的要求。測試
編程語言選擇C或C++均可以,但須要符合編碼規範,且必需要有註釋。編碼規範、註釋、git commit 信息,均可以上網搜索寫法,學會合理使用搜索引擎來學習是計算機專業學生的必經之路。搜索引擎
github使用教程參考:http://www.cnblogs.com/schaepher/p/5561193.html編碼
引入時間變量time記錄總時間,運行到每一個點判斷向上和向下的請求數並執行較大者(向下的請求數=目標樓層比該樓層低的請求個數+此時電梯下方未上電梯的請求個數,向上的請求數同理。當某一請求的請求時刻>time或已經登上電梯時,該請求不歸入計算。),每次運行到請求點或目的地時再執行判斷,直到全部乘客都到達目的地。(紅色部分是與上一次電梯編程不同的地方)。
例1
下面是一個簡單文件讀取程序,首先是寫數據,將數字0~9寫入到data.txt文件中,而後再從data.txt中讀取數據,將讀到的數據存到數組a[10]中,而且打印到控制檯上。
下面是程序:
#include <stdio.h> int main() { //下面是寫數據,將0~9數字寫入到data.txt文件中 FILE *fpWrite=fopen("data.txt","w"); if(fpWrite==NULL) { return 0; } for(int i=0;i<10;i++) fprintf(fpWrite,"%d ",i); fclose(fpWrite); //下面是讀數據,將讀到的數據存到數組a[10]中,而且打印到控制檯上 int a[10]={0}; FILE *fpRead=fopen("data.txt","r"); if(fpRead==NULL) { return 0; } for(int i=0;i<10;i++) { fscanf(fpRead,"%d ",&a[i]); printf("%d ",a[i]); } getchar();//等待 return 0; }
例2
用c語言實現讀取一個txt文件裏的數據 要按行讀出來
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE 1024 int main() { char buf[MAX_LINE]; /*緩衝區*/ FILE *fp; /*文件指針*/ int len; /*行字符個數*/ if((fp = fopen("test.txt","r")) == NULL) { perror("fail to read"); exit (1) ; } while(fgets(buf,MAX_LINE,fp) != NULL) { len = strlen(buf); buf[len-1] = '\0'; /*去掉換行符*/ printf("%s %d \n",buf,len - 1); } return 0; }