日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Code pratice】—— 成绩统计、星系炸弹、特别数的和、蛇形填数、日志统计

發(fā)布時間:2024/1/1 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Code pratice】—— 成绩统计、星系炸弹、特别数的和、蛇形填数、日志统计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Date:2022?10?02\color{FF6699}{Date:2022-10-02}Date2022?10?02

If\color{FF6699}{If}If I\color{FF6699}{I}I can′t\color{FF6699}{can't}cant I\color{FF6699}{I}I must;\color{FF6699}{must;}must; If\color{FF6699}{If}If I\color{FF6699}{I}I must\color{FF6699}{must}must I\color{FF6699}{I}I can!\color{FF6699}{can!}can!

文章目錄

  • 🍎1. 成績統(tǒng)計🍎1
    • 🍇題目🍇
    • 🍇思路🍇
    • 🍇代碼🍇
  • 🍊2. 星系炸彈🍊
    • 🍌題目🍌
    • 🍌思路🍌
    • 🍌代碼🍌
  • 🍍3. 特別數的和🍍
    • 🥭題目🥭
    • 🥭思路🥭
    • 🥭代碼🥭
  • 🍒4. 蛇形填數🍒
    • 🍑題目🍑
    • 🍑思路🍑
    • 🍑代碼🍑
  • 🍋5. 日志統(tǒng)計🍋
    • 🍉題目🍉
    • 🍉思路🍉
    • 🍉代碼🍉

🍎1. 成績統(tǒng)計🍎1

🍇題目🍇

編寫一個程序,建立了一條單向鏈表,每個結點包含姓名、學號、英語成績、數學成績和C++成績,并通過鏈表操作平均最高的學生和平均分最低的學生并且輸出。
輸入格式
輸入n+1行,第一行輸入一個正整數n,表示學生數量;接下來的n行每行輸入5個數據,分別表示姓名、學號、英語成績、數學成績和C++成績。注意成績有可能會有小數。

輸出格式
輸出兩行,第一行輸出平均成績最高的學生姓名。第二行輸出平均成績最低的學生姓名。

樣例輸入

2 yx1 1 45 67 87 yx2 2 88 90 99

🍇思路🍇

科目數量固定,所以求平均成績最高最低相當于求總分最高最低的即可。

🍇代碼🍇

void ScoreCount(int i_StudentNum) {if ((0 > i_StudentNum)){cout << "Invalid date entered." << endl;}Student stu[i_StudentNum];double scoreSum = 0.0;double minSum = 300.0;double maxSum = 0.0;string minName = "";string maxName = "";for (int i = 0; i < i_StudentNum; i++){cout << "Please input Student [" << i <<"]'s name, id, english score, math score, cplusplus score: " << endl;cin >> stu[i].name >> stu[i].id >> stu[i].english >> stu[i].math >> stu[i].cplusplus;scoreSum = stu[i].math + stu[i].english + stu[i].cplusplus;if (minSum > scoreSum){minSum = scoreSum;minName = stu[i].name;}if (maxSum < scoreSum){maxSum = scoreSum;maxName = stu[i].name;}}cout << "The person with the lowest average score is [" << minName << "]." << endl;cout << "The person with the highest average score is [" << maxName << "]." << endl; }

🍊2. 星系炸彈🍊

🍌題目🍌

在X星系的廣袤空間中漂浮著許多X星人造“炸彈”,用來作為宇宙中的路標。
每個炸彈都可以設定多少天之后爆炸。
比如:阿爾法炸彈2015年1月1日放置,定時為15天,則它在2015年1月16日爆炸。
有一個貝塔炸彈,2014年11月9日放置,定時為1000天,請你計算它爆炸的準確日期。

🍌思路🍌

炸彈會在定時達到那天爆炸,也就是當定時時間從N減到0時的那天就是爆炸的準確日期,那么本題只需要通過遞減定時時間的同時,計算新的日期即可,要注意的是

  • 每個月的最后一天時,新增一天,應該將月份增1,日數重置為1
  • 2月份的準確天數要先判斷當前年份是閏年還是平年
  • 🍌代碼🍌

    int GalaxyBomb(int i_Year, int i_Mon, int i_Day, int i_Timing) {if (!IsValidDate(i_Year, i_Mon, i_Day)){return -1;}int curYear = i_Year;int curMon = i_Mon;int curDay = i_Day;while (i_Timing){bool IsSpecialDay = false;if (2 == curMon){if (IsLeapYear(curYear)){if (29 == curDay){curDay = 1;curMon++;IsSpecialDay = true;}}else{if (28 == curDay){curDay = 1;curMon++;IsSpecialDay = true;}}}else if (sBigMonth(curMon)){if (12 == curMon){if (31 == curDay){curDay = 1;curMon = 1;curYear++;IsSpecialDay = true;}}if (31 == curDay){curDay = 1;curMon++;IsSpecialDay = true;}}else{if (30 == curDay){curDay = 1;curMon++;IsSpecialDay = true;}}if (!IsSpecialDay){curDay++;}i_Timing--;}char strDate[100];memset(strDate, 0, 100);sprintf(strDate, "The bomb will explode on %d-%d-%d", curYear, curMon, curDay);cout << strDate << endl;return 1; }

    🍍3. 特別數的和🍍

    🥭題目🥭

    小明對數位中含有 2、0、1、9 的數字很感興趣(不包括前導 0),在 1 到 40 中這樣的數包括 1、2、9、10 至 32、39 和 40,共 28 個,他們的和是 574。
    請問,在 1 到 n 中,所有這樣的數的和是多少?
    輸入格式
    共一行,包含一個整數 n。

    輸出格式
    共一行,包含一個整數,表示滿足條件的數的和。

    🥭思路🥭

    只需要遍歷從1到N的所有數字,如果該數字中包含[2, 0, 1, 9]就進行相加即可

    🥭代碼🥭

    int SumOfSpecialNum(int i_Inter) {if ((0 > i_Inter) || (10000 < i_Inter)){return -1;}int o_sum = 0;for (int i = 1; i <= i_Inter; i++){int j = i;while (j){int tmp = j % 10;if ((2 == tmp) || (0 == tmp) || (1 == tmp) || (9 == tmp)){cout << i << endl;o_sum += i;break;}j /= 10;}}return o_sum; }

    🍒4. 蛇形填數🍒

    🍑題目🍑

    126715…
    35814
    4913
    1012
    11
    蛇形矩陣如上,容易看出矩陣第二行第二列中的數是5。請你計算矩陣中第20 行第20 列的數是多少?

    🍑思路🍑

    蛇形矩陣的規(guī)律就是碰到邊界就往回走,那么本題實際只需要做好邊界判定的邏輯即可

  • 當碰到上邊界時,往左下方向走
  • 當碰到左邊界時,往右上方向走
  • 遍歷到要求的位置時停下即可
  • 🍑代碼🍑

    int SnakeMatrix(int i_X, int i_Y) {if ((0 >= i_X) || (0 >= i_Y)){return -1;}int MatrixLen = (i_X > i_Y) ? ((i_X * 2) - 1) : ((i_Y * 2) - 1);int MatrixItemStart = 1;int i = 0;int j = 0;bool Process = false;vector<vector<int> > Matrix(MatrixLen, vector<int>(MatrixLen, 0)); Matrix[0][0] = MatrixItemStart++;while (1){if (0 != Matrix[i_X - 1][i_Y - 1]){break;}j++;while (-1 != j){Matrix[i][j] = MatrixItemStart++;if (0 == j){break;}i++;j--;}i++;while (-1 != i){Matrix[i][j] = MatrixItemStart++;if (0 == i){break;}i--;j++;}}return Matrix[i_X - 1][i_Y - 1]; }

    🍋5. 日志統(tǒng)計🍋

    🍉題目🍉

    小明維護著一個程序員論壇。現在他收集了一份”點贊”日志,日志共有 N 行。
    其中每一行的格式是:
    ts id
    表示在 ts 時刻編號 id 的帖子收到一個”贊”。
    現在小明想統(tǒng)計有哪些帖子曾經是”熱帖”。
    如果一個帖子曾在任意一個長度為 D 的時間段內收到不少于 K 個贊,小明就認為這個帖子曾是”熱帖”。
    具體來說,如果存在某個時刻 T 滿足該帖在 [T,T+D) 這段時間內(注意是左閉右開區(qū)間)收到不少于 K 個贊,該帖就曾是”熱帖”。
    給定日志,請你幫助小明統(tǒng)計出所有曾是”熱帖”的帖子編號。
    輸入格式
    第一行包含三個整數 N,D,K。
    以下 N 行每行一條日志,包含兩個整數 ts 和 id。

    輸出格式
    按從小到大的順序輸出熱帖 id。
    每個 id 占一行。

    輸入樣例:
    7 10 2
    0 1
    0 10
    10 10
    10 1
    9 1
    100 3
    100 3

    輸出樣例:
    1
    3

    🍉思路🍉

    題目要求:升序輸出所有的熱帖id

    那么關鍵點就是怎么判斷是不是熱帖?
    存在某個時刻 T 滿足該帖在 [T,T+D) 這段時間內(注意是左閉右開區(qū)間)收到不少于 K 個贊,該帖就曾是”熱帖”。
    這里舉個例子就比如此時D = 10, K = 2
    帖子a和帖子b在1時刻收到一個贊,然后帖子a在10時刻再次收到一個贊,帖子b在11時刻也收到一個贊
    對于帖子a來說:在 [1, 11) 這個時間段里收到了兩個贊,所以a是熱帖
    對于帖子b來說:在 [1, 11) 這個時間段里只有一個贊,第二個贊是在11時刻收到的,不在區(qū)間內

    所以具體思路如下:

  • 先獲取點贊數符合條件的帖子id,同時記錄下該id每一個贊對應的時間段
  • 對第一步獲取的熱帖id的每一個贊的時刻進行排序,只要其第二個贊的時間減去第一個贊的時間符合熱帖條件的id即為熱帖id
  • 最后對熱帖id進行排序即可
  • 🍉代碼🍉

    vector<int> LogStatistics(int i_Nth, int i_Dth, int i_Praisenum) {vector<int> result = {-1};if ((1 > i_Nth || 100000 < i_Nth)|| (1 > i_Dth || 10000 < i_Dth)|| (1 > i_Praisenum || 100000 < i_Praisenum)){return result;}vector<int> IsValidId; // 記錄符合條件的IDvector<int> IdFrequency(200, 0); // 記錄每個ID出現的次數vector<vector<int> > IdEveryTime(200, vector<int>(200, 0)); // 記錄每個ID每次出現的時間,行為 id, 列為 tsfor (int i = 0; i < i_Nth; i++){int ts = 0;int id = 0;cout << "Please input [" << i << "]'s ts id: ";cin >> ts >> id;IdFrequency[id]++;if (i_Praisenum == IdFrequency[id]){IsValidId.push_back(id);}IdEveryTime[id][IdFrequency[id]] = ts;}sort(IsValidId.begin() + 1, IsValidId.end());for (int i = 0; i < IsValidId.size(); i++){vector<int> IdTime; // 記錄每個 id 出現的時間for (int j = 1; j <= IdFrequency[IsValidId[i]]; j++){IdTime.push_back(IdEveryTime[IsValidId[i]][j]);}sort(IdTime.begin(), IdTime.end());if (i_Dth > (IdTime[i_Praisenum - 1] - IdTime[0])){result.push_back(IsValidId[i]);}}sort(result.begin(), result.end());return result; }

    總結

    以上是生活随笔為你收集整理的【Code pratice】—— 成绩统计、星系炸弹、特别数的和、蛇形填数、日志统计的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。