poj之路2 487 3279電話薄求重複

2021-07-02 19:53:36 字數 2858 閱讀 4775

自己的思路實現的,少量資料時可以正常執行,因為使用了string陣列,不能達到100000的資料量。這個演算法是第一次使用string類的一些函式,留著供以後參考。**如下:

#include #include #include using namespace std;

char get_num(char a)

int main()

/* string st1="",st2;

cout<>str[i];

}*/str[0]="4873279";

str[1]="its-easy";

str[2]="888-4567";

str[3]="3-10-10-10";

str[4]="888-glop";

str[5]="tut-glop";

str[6]="967-11-11";

str[7]="310-gino";

str[8]="f101010";

str[9]="888-1200";

str[10]="-4-8-7-3-2-7-9-";

str[11]="487-3279";

for(i=0;i='0'&&*itr<='9')

else if(*itr>='a'&&*itr<='y')

else

itr++;

} }m=0;

for(i=0;i=2)

m++;}}

int temp;

for(i=0;i不用字串來處理,將**用整數進行儲存,處理更快,先查詢相同的**,儲存**和重複的個數,然後用氣泡排序對**排序,最後輸出,改進的**如下:

#include #include #include using namespace std;

int get_num(char a)

int get_int(string s)

return num;

}int main()

m=0;

for(i=0;i=0)

}if(re_num[m]>=2)

m++;

} } int temp;

for(i=0;ire_pho[j])

}for(i=0;i提交後,顯示超時,需要繼續改進**,實現中使用了四個for迴圈,可以考慮操作合在一起進行;同時,排序演算法,考慮快排,試試能不能通過。

三、改進2

進行了簡化處理,並用快速排序進行排序,但提交後照樣是超時,先儲存一下**,後續再進行研究。

#include #include #include using namespace std;

int get_num(char a)

int get_int(string s)

return num;

}void qsort(int a,int b,int low,int high)

first=low;last=high;

pivot=a[first];

pi_num=b[first];

while(first=pivot)--last;

a[first]=a[last];//比初始關鍵字小的移到陣列前面

b[first]=b[last];

while(first>pho_num;

// pho_num=12;string str[20];

string str;

/* str[0]="0003279";

str[1]="487-3279";

str[2]="888-0100";

str[3]="3-10-10-10";

str[4]="888-glop";

str[5]="tut-glop";

str[6]="000-3279";

str[7]="310-gino";

str[8]="f101010";

str[9]="888-0100";

str[10]="-4-8-7-3-2-7-9-";

str[11]="487-3279";

*/ m=0;

for(i=0;i>str;

pho_temp=get_int(str);

/* if(i==0)

*////*

for(j=0;j=2)

} int temp;

qsort(re_pho,re_num,0,shu_temp-1); //排序

for(i=0;i看了一些思路,修改了下程式,終於ac了,**如下:

//#include #include #include using namespace std;

int comp(const void *a,const void *b)

int get_num(char a)

int get_int(string s)

return num;

} int main()

qsort(pho,pho_num,sizeof(int),comp); //自帶的快速排序

int temp;

m=0;int no=0;

for(i=0;i=2)

{ temp=pho[i]/10000;

if(temp/10==0)cout<<"00";

else if(temp/100==0)cout<<"0";

cout<

這道題整整花了一天時間,前後整體了改了四次,先是用字串處理和儲存資料,將問題複雜了,處理操作更難而且記憶體更大。

第二,我是先統計重複號碼,挑選出重複的再進行的排序,想著排序的整數數量會減少,但是實現起來較複雜,貌似花費時間更多,因此改為了先對所有排序,然後在統計重複的時候進行輸出。

總之,在想思路時,必須充分考慮實現的複雜性,盡量簡化步驟。

poj 1002 (電話號碼)

題目意思很簡單,就不重複了。這是乙個很簡單的模擬題,但是我居然wa了很多次。看了題目的討論,才發現,號碼還有數字0開頭的。簡直無語了。這組資料輸出 000 0000 2 也是考慮不全,居然沒想到還會有0開頭的 號碼。如下 include include includeusing namespace ...

poj 1002 電話號碼查重

雖然網上都說這是一道水題,其實我也感覺這題思路滿清晰的,但死活提交不通過,基本都是時間超了,後來勉強痛過了,但效果還是不怎麼理想。這裡做乙個簡單分析 1.我們一開始的程式是利用stl中的vector,string 等容器讀入資料,然後自己寫了乙個快速排序的演算法,對儲存在vector中的string...

POJ 1002 電話號碼字串處理

這題比較簡單,就是對 號碼的字串處理並排序輸出,但是實現時有幾個注意的地方 1 用map儲存比較方便,可以自動根據string的排序規則排序,而且題目資料恰好是的k v儲存特點。2 用另乙個字串重新拼接待輸出地字串比直接對輸入字串進行替換移位等操作要方便。3 注意字元和數字的ascii的轉化。4 的...