九度OJ練習筆記

2021-07-11 02:44:07 字數 2816 閱讀 3863

1.c++中使用stl庫,簡化**。

#include 

#include /*排序演算法包含在此處*/

#include

using

namespace

std;

int main()

sort(num.begin(),num.end()); /*排序演算法*/

for(int i=0;icout

<' ';

}cout

<<'\n';

}return

0;}

2.排序問題

有n個學生的資料,將學生資料按成績高低排序,如果成績相同則按姓名字元的字母序排序,如果姓名的字母序也相同則按照學生的年齡排序,並輸出n個學生排序後的資訊。

//自己的做法如下

#include

#include

using

namespace

std;

struct student

;int main()

else

if(num[j].grade==num[j-1].grade)

else

if(num[j].name.compare(num[j-1].name)==0)}}

}}

for(int i=0;icout

<' '

<' '

<'\n';}}

return

0;}

別人家寫的**,借鑑一下。重點就在於我在考慮這段**的時候放棄了vector,因為覺得沒有辦法實現,但是實際上可以先定義乙個結構體型別,再把vector的資料型別設定謂結構體的型別。這樣又可以呼叫push_back函式比較方便。

另外乙個比較棒的地方就在於使用了sort函式,不用自己寫(是我對sort函式的掌握不夠…淚目 因為用了vector所以可以使用begin和end函式,同時設定了乙個comp函式。

還有乙個自己的**裡面比較麻煩的地方在於用了string內建的compare函式,當時覺得自己想到是很厲害的事情,然後就發現原來自己是個蠢比,明明用比較符就可以解決的問題搞得這麼複雜。

還有乙個注意點就是因為題目裡面要求要一次可以輸入多個陣列,所以要把向量的定義放在while的最大迴圈裡面,否則會出現output limit exceed即輸出多餘內容的問題。

#include

#include

#include

#include

using

namespace

std;

struct info;

bool comp(const info &a,const info &b)

sort(v.begin(),v.end(),comp);

for(int i=0;icout

<' '

<' '

<'\n';}}

return

0; }

//逆序

bool cmp(int a, int b)

/*定義node型別的陣列進行排序:先按x值公升序排列,如果x值相同,再按y值降序排列,如果y還相同,就按z降序排列。*/

struct node

;bool cmp(node a, node b) //輸入比較函式的兩個形參,返回前者大於後者即為降序

2.iomanip中的控制符

1.輸入乙個字串,長度小於等於200,然後將輸出按字元順序公升序排序後的字串。

看完別人寫的**就覺得自己寫的實在是太複雜了!不好意思貼,貼個大大寫的。

#include 

#include

#include

using

namespace

std;

int main()

return

0; }

2.有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的我們規定他們之間的天數為兩天.

被坑死的一道題,本身題目的思維就讓我有點卡住,因為大小不擅長算日期,永遠搞不清楚間隔是幾天(怪我咯… 這道題目的想法就是,先把各自從00000000日期開始的總天數算出來,然後兩個相減,就可以的到結果了。

一開始一直是ce,但是在sublime上面可以執行,應該是acm不相容的格式問題之類,後來發現真的是小地方。

#include using namespace std;

int mon[12]=;

struct date

;int

abs(int result)

int isleapyear(int

year)

void setdate(int element,struct date & date)

int sumday(struct date

date)

for(int i=0;i1;i++)

if(m>2 && isleapyear(y))

else sum+=d;

return sum;

}int main()

1.acm**不能引用cmath標頭檔案,所以要自己編寫abs()。

2.題目對於輸入元素的數量有限制的時候,最好用陣列之類的,否則就算編譯對了最後還是wa,被坑死。

3.因為acm一般都是多組資料輸入的,因此要保證前一組輸入的資料在新一組的情況下被清零,不會對現在的結果產生影響。陣列設定可以放在迴圈內。

to be continue..

九度oj 1151 位操作練習

時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 1621 解決 903 題目描述 給出兩個不大於65535的非負整數,判斷其中乙個的16位二進位制表示形式,是否能由另乙個的16位二進位制表示形式經過迴圈左移若干位而得到。迴圈左移和普通左移的區別在於 最左邊的那一位經過迴圈左移一位後就會被...

九度OJ 題目1151 位操作練習

一.題目描述 給出兩個不大於65535的非負整數,判斷其中乙個的16位二進位制表示形式,是否能由另乙個的16位二進位制表示形式經過迴圈左移若干位而得到。迴圈左移和普通左移的區別在於 最左邊的那一位經過迴圈左移一位後就會被移到最右邊去。比如 1011 0000 0000 0001 經過迴圈左移一位後,...

九度Oj題解

一 動態規劃專題 1205 n階樓梯上樓問題 dp i 表示到達i階的方法數,狀態轉移方程 dp i dp i 1 dp i 2 值很大要用long long.1451 不容易系列之一 dp i 表示總共i個數時的錯排方案數,狀態轉移方程 dp i i 1 dp i 1 i 2 dp i 2 142...