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...