2020年6月23日 星期二

[程式設計工法] C/ C++,a005: Eva 的回家作業@0判

C/ C++,a005: Eva 的回家作業@0判


FB2http://gg.gg/TedLeeMicrobitFB/
URL2http://gg.gg/TedLeeMicrobit/

Line:ted2016.kpvs
Email:Lct4246@gmail.com
FB1http://gg.gg/TedLeeFB/
Bloghttp://gg.gg/TedLeeBlog/
URL1http://gg.gg/TedLeeURL/

May. 16, 2020
88x31.png[1]

問題解決(Problem Solving之逻輯思維 =
心法: 程式設計哲思(Philosophical Thinking for Programming) +
技法:程式設計工法(Skills for Programming)


    解析:
    • 直接run結果建立直觀:
    • Idea:將test data讀入(存在1-D陣列data[]中)後計算結果(等差或等比),再依題目需求編排輸出格式。
    • 一般測資(例如:open data)會以CSV(Comma Separated ValuesXML(Extensible Markup Language)JSON(JavaScript Object Notation)格式(format)儲存。所以,programmer會呼叫parser來幫忙將raw data讀進memory中。讀進來的資料常會以arraystructures、甚或data base的tables革等data structures來儲存。
    • 用scanf()讀console輸入的字串時要留意字串結尾控制碼'\0'的額外處理。
    • 學習要學一般的通則(general purpose),這樣會一理通、萬理通。所以,我們乖乖的從stdin讀入data後,存在內部的資料結構。經運算後再丟到stdout(實際應用可能是用.txt、.csv、.xml、.json格式存)。

    #include <iostream>
    using namespace std;

    int data[100];

    void printArray(int t) {
    int i = 0;

    for (i=0; i<5*t; i++) {
    cout << data[i] << " ";
    if ((i+1)%5==0) {
    cout << endl;
    }
    }
    }

    int main(void) {
    //int data[100]={1, 2, 3, 4, 0, 1, 2, 4, 8, 0, 4, 6, 8, 10, 0};

    int i = 0;
    int d1 = 0;
    int d2 = 0;
    int r1 = 0;
    int r2 = 0;

    int t = 0;
    int j = 0;
    int lf = 0;

    //讀入數列筆數
      cin >> t;

      for (i=0; i<t; i++) {
       for (j=0; j<4; j++) {
       cin >> lf;

    data[i*5+j] = lf;
    }
      }

      //printArray();
      
    for (i=0; i<100; i+=5) {
    d1 = data[i+3] - data[i+2];
    d2 = data[i+2] - data[i+1];
    if (d1 == d2) { //處理等差
    data[i+4] = data[i+3] + d1;
    } else { //處理等比
    r1 = data[i+3] / data[i+2];
    r2 = data[i+2] / data[i+1];
    data[i+4] = data[i+3] * r1;
    }
    }

    printArray(t);

    return 0;
    }

    参考資料
    1. 六種授權條款

    沒有留言: