DAY9 演算法提高 成績排序(1)(2)

2021-10-02 14:50:28 字數 2092 閱讀 2078

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

給出n個學生的成績,將這些學生按成績排序,

排序規則,優先考慮數學成績,高的在前;數學相同,英語高的在前;數學英語都相同,語文高的在前;三門都相同,學號小的在前

輸入格式

第一行乙個正整數n,表示學生人數

接下來n行每行3個0~100的整數,第i行表示學號為i的學生的數學、英語、語文成績

輸出格式

輸出n行,每行表示乙個學生的數學成績、英語成績、語文成績、學號

按排序後的順序輸出

樣例輸入

21 2 3

2 3 4

樣例輸出

2 3 4 2

1 2 3 1

資料規模和約定

n≤100

注意審題即可,思路不難想,題目都給出來了,迴圈即可搞定

需要注意的是,這題排序方式不包括總分。

#include

using

namespace std;

struct stu

s[105];

intmain()

for(

int i =

1; i)for

(int j = i +

1; j <= n; j++

)else

if(s[i]

.x == s[j]

.x)else

if(s[i]

.y == s[j]

.y)else

if(s[i]

.z == s[j]

.z)}}}

}for

(int i =

1; i <= n; i++

)return0;

}

該方法是最好寫的,缺點是執行速度慢,通過接下來的學習爭取可以找到提公升速度的方法

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

給出n個學生的成績,將這些學生按成績排序,排序規則:總分高的在前;總分相同,數學成績高的在前;總分與數學相同,英語高的在前;總分數學英語都相同,學號小的在前

輸入格式

第一行乙個正整數n,表示學生人數

接下來n行每行3個0~100的整數,第i行表示學號為i的學生的數學、英語、語文成績

輸出格式

輸出n行,每行表示乙個學生的數學成績、英語成績、語文成績、學號

按排序後的順序輸出

樣例輸入

21 2 3

2 3 4

樣例輸出

2 3 4 2

1 2 3 1

資料規模和約定

n≤100

此題與上題類似,注意審題,這題引入了總成績的比較,但是去掉了語文成績的比較(難道語文不重要嗎!!!!??)解題思路和上題完全一樣。資料規模依然不大,用氣泡排序即可。

#include

using

namespace std;

typedef

struct

stu;

stu s[

105]

;int

main()

for(

int i =

1; i)for

(int j = i +

1; j <= n; j++

)else

if(s[i]

.sum == s[j]

.sum)

else

if(s[i]

.x == s[j]

.x)else

if(s[i]

.y == s[j]

.y)}}}

}for

(int i =

1; i <= n; i++

)return0;

}

總結:本次因為**較長,出現了許多小細節的錯誤。以後練習的**一定越來越長,爭取思路沒問題的題目一次ac,不要浪費時間在小的細節。

演算法營day9

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。思路 如果乙個陣列中,只有乙個數字出現一次的話,求這個數的?將序列中的所有數字異或,因為相同的數字異或會為0,乙個不為0的數字異或還是這個數字本身。這個題可以轉換為上述的題,將序列中的所有數字異或,...

雙指標演算法 day 9

樸素做法模板 for int i 0 i n i for int j 0 j i j if check j,i 雙指標演算法模板 for int i 0,j 0 i n i 問題 最長連續不重複子序列 給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。輸入格式 第一行包...

演算法題Day9 移除元素

給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例 1 給定 nums 3,2,2,3 ...