標籤:
一、題目要求
隨著Tan-go的發展,發現,“超級水王”沒有了。統-計結-果表-明,有3個發帖很多的ID,他們的 數目都超過了 總數目N的1/4。你能從 ID列表中快速找出他們的ID嗎?
二、設計思想
3個水王,他們 數都超過了總數1/4,每次刪去4個不同的id,剩下的一定還是符合3個水王的發-帖數都超過1/4;
找到一個不為0的id儲存其位置,然後找到第二個不為0且不與第一個相同的id的位置,依次類推,找到第四個。然後把四個賦值為0.迴圈執行上面,知道剩餘的id都是水王的id為止
三、原始碼
#include <iostream.h>int find(int id[],int length)//把剛才寫的封裝成一個函數,以便於多次調用{ int true1=1; int xiaoa=0; int xiaob=0; int xiaoc=0; int xiaod=0; int n1=0; int n2=0; int n3=0; int n4=0; for(int i=0;i<length;i++) { if(id[i]!=0)//不等於0 { xiaoa=id[i]; n1=i; i=length; } } for(i=0;i<length;i++) { if((id[i]!=0)&&(id[i]!=xiaoa)) { xiaob=id[i]; n2=i; i=length; } } for(i=0;i<length;i++) { if((id[i]!=0)&&(id[i]!=xiaoa)&&(id[i]!=xiaob)) { xiaoc=id[i]; n3=i; i=length; } } for(i=0;i<length;i++) { if((id[i]!=0)&&(id[i]!=xiaoa)&&(id[i]!=xiaob)&&(id[i]!=xiaoc)) { xiaod=id[i]; n4=i; i=length; } } //cout<<xiaoa<<" "<<xiaob<<" "<<xiaoc<<" "<<xiaod<<endl; //讓他們都等於0 //xiaoa=xiaob=xiaoc=xiaod=0; id[n1]=id[n2]=id[n3]=id[n4]=0; return 0;}int main(void){ int id[13]={1,2,2,2,2,3,4,3,3,3,4,4,4}; //find(id,13); //一直重複上面的函數find代碼直到數組裡面沒有四個不同的為止,也就是只剩下3個水王 int n;//重複的次數 int sum;//這個文章總共有多少條 cout<<"輸入總共總共有多少條:"; cin>>sum; n=sum%3; //cout<<n<<endl; for(int j=0;j<n;j++) { find(id,sum); } //把數組中的重複的水王id去掉 //迴圈把所有數組裡面不是0的數輸出,就是3個水王 for(int i=0;i<13;i++) { if(id[i]!=0) cout<<id[i]<<" "; } cout<<endl; cout<<"結果中只有3個,都是水王的id;這個程式還要最佳化結果輸出,和時間複雜度"<<endl; return 0;}
四、結果
五、總結
注意求餘符號%和整除符號/的區別使用
每一個參數盡量命名合 適,必要的時候加上注釋,以便於在編寫代碼的時候思路清晰,也方便以後查看
代碼編寫完畢,如果還有想法要 寫明,以便於日後查看
每次編寫出一個程式都有一種喜人的成就感,好好享受!
儘管水平不高,但一直努力!
軟工作業 尋找水王 拓展