時間限制:
3000 ms | 記憶體限制:
65535 kb
難度:3 描述
現在有很多長方形,每乙個長方形都有乙個編號,這個編號可以重複;還知道這個長方形的寬和長,編號、長、寬都是整數;現在要求按照一下方式排序(預設排序規則都是從小到大);
1.按照編號從小到大排序
2.對於編號相等的長方形,按照長方形的長排序;
3.如果編號和長都相同,按照長方形的寬排序;
4.如果編號、長、寬都相同,就只保留乙個長方形用於排序,刪除多餘的長方形;最後排好序按照指定格式顯示所有的長方形;
輸入第一行有乙個整數 0
輸出順序輸出每組資料的所有符合條件的長方形的 編號 長 寬
樣例輸入
181 1 1
1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
樣例輸出
1 1 11 2 1
1 2 2
2 1 1
2 2 1
這道題雖然題目長,但是很好理解,可是寫**的時候又覺得**不對了,總覺得自己寫的太複雜,可是又感覺必須要有這些過程。真可謂是一波三折啊。哈哈哈
廢話不多說了,下面是我的程式:
#include #include //用結構體儲存資料
typedef struct rectangle rect;
//排序,這裡用交換指標的位址來排序
void paixu( rect *p,rect *q)
int main()
else
} for(i=0;iflag = 1; //標誌初始化,預設為沒有需要丟棄的
for(i=0;isequence > rect[j]->sequence && rect[i]->flag && rect[j]->flag)
else if( !rect[i]->flag ) //如果前面乙個數是廢棄的數,直接進行下一輪比較
break;
else if( ! rect[j]->flag) //如果後乙個數是廢棄的數,則跳過去,繼續和下乙個比較
continue;
else if(rect[i]->sequence == rect[j]->sequence) //序號相等時比較長
else if(rect[i]->chang == rect[j]->chang) //長相等時比較寬
else if(rect[i]->wide == rect[j]->wide ) //寬相等時將其中乙個資料廢棄
rect[i]->flag = 0;
} }
}//end for(j=i+1;...)
for(i=0;iflag) )
continue;
printf("%d %d %d \n",rect[i]->sequence,rect[i]->chang,rect[i]->wide);
} for(i=0;i
執行時間12,記憶體308。
收穫:人腦思維和電腦的思維方式是很不一樣的,很多人腦覺得很容易的事件,電腦處理起來就很複雜(比如用眼睛去判斷乙個人是誰和用電腦去判斷),但也有很多人腦覺得很複雜的事情,電腦處理起來就覺得很輕鬆(比如大整數的運算)。所以我們需要合理的利用電腦的思維方式去解決我們生活中的難題。作為乙個程式設計師更是要深入了解和運用電腦思維,創造乙個乙個的奇蹟。
開開心心學演算法 一種排序
時間限制 3000ms 記憶體限制 65535kb 難度 3 描述 現在有很多長方形,每乙個長方形都有乙個編號,這個編號可以重複 還知道這個長方形的寬和長,編號 長 寬都是整數 現在要求按照一下方式排序 預設排序規則都是從小到大 1.按照編號從小到大排序 2.對於編號相等的長方形,按照長方形的長排序...
開開心心學演算法 排序演算法
歸併排序 快速排序 堆排序思路 對於乙個序列為1,a2,an 的序列而言,1 是有序序列,而2,an 為待排序序列 那麼先抽出a2,讓key a2,這一步的目的是防止當a1往後移動的時候a2被覆蓋掉 然後讓a1與a2比較,如果a1 a2,則保持a2的位置不變 否則將a1向後移動一位,那麼此時a1就在...
開開心心學演算法 噴水裝置(一)
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述現有一塊草坪,長為20公尺,寬為2公尺,要在橫中心線上放置半徑為ri的噴水裝置,每個噴水裝置的效果都會讓以它為中心的半徑為實數ri 0 輸入第一行m表示有m組測試資料 每一組測試資料的第一行有乙個整數數n,n表示共有n個噴水裝置,...