📄 subject_21082.htm
字号:
<p>
序号:21082 发表者:jw 发表日期:2002-11-13 15:55:42
<br>主题:请教两道算法题:
<br>内容:1:知一个向量中的元素值非递减有序排列,编写一个函数删除向量中多余的值相同的元素。<BR>2:编写一个算法,使用带表头附加结点的循环单链表解决约瑟夫问题。其问题是:设有N个人围坐在一张圆桌周围,现从某个人开始从一报数,数到M的人出列(即离开座位,不参加以后的报数),接着从出列的下一个人开始重新从1报数,树到M的人又出列,如此下去直到所有的人都出列为止。试求出他们的出列次序。例如当N=8,M=4时,若从第一个人(假定每个人的编号依次为1,2……N)开始报数,则得到的出列次序为4,8,5,2,1,3,7,6。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:天才 回复日期:2002-11-15 16:33:04
<br>内容://delNoUse.h<BR>#ifndef _DELNOUSETEMPLATE_<BR>#define _DELNOUSETEMPLATE_<BR><BR>#ifndef _STD_VECTOR_<BR>#define _STD_VECTOR_<BR><BR>#include <vector><BR><BR>#endif _STD_VECTOR_<BR><BR>#ifndef _STD_MAP_<BR>#define _STD_MAP_<BR><BR>#include <map><BR><BR>#endif _STD_MAP_<BR><BR>using namespace std;<BR><BR>template <class T><BR>class delNoUseTemplate<BR>{<BR>public:<BR> delNoUseTemplate();<BR> delNoUseTemplate(vector<T>& vec);<BR> void setVector(vector<T>& vec);<BR> vector<T> getResult();<BR> ~delNoUseTemplate();<BR>private:<BR> void generateResult();<BR> void makeMap(T& t);<BR> void makeVec(pair<T,char> p);<BR>private:<BR> std::vector<T> m_vec;<BR> std::map<T,char> m_map;<BR>};<BR>template <class T><BR>delNoUseTemplate<T>::delNoUseTemplate<T>()<BR>{<BR><BR>}<BR>template <class T><BR>delNoUseTemplate<T>::delNoUseTemplate<T>(vector<T>& vec)<BR>{<BR> vector<T>::iterator l_itVec;<BR> for(l_itVec=vec.begin();l_itVec!=vec.end();l_itVec++)<BR> {<BR> m_vec.push_back(*l_itVec);<BR> }<BR>}<BR>template <class T><BR>delNoUseTemplate<T>::~delNoUseTemplate<T>()<BR>{<BR> m_vec.clear();<BR> m_map.clear();<BR>}<BR>template <class T><BR>void delNoUseTemplate<T>::setVector(vector<T>& vec)<BR>{<BR> vector<T>::iterator l_itVec;<BR> for(l_itVec=vec.begin();l_itVec!=vec.end();l_itVec++)<BR> {<BR> m_vec.push_back(*l_itVec);<BR> }<BR>}<BR>template <class T><BR>vector<T> delNoUseTemplate<T>::getResult()<BR>{<BR> generateResult();<BR> return m_vec;<BR>}<BR>template <class T><BR>void delNoUseTemplate<T>::generateResult()<BR>{<BR> vector<T>::iterator l_itVec;<BR> map<T,char>::iterator l_itMap;<BR><BR> m_map.clear();<BR> for(l_itVec=m_vec.begin();l_itVec!=m_vec.end();l_itVec++)<BR> {<BR> makeMap(*l_itVec);<BR> }<BR> m_vec.clear();<BR> for(l_itMap=m_map.begin();l_itMap!=m_map.end();l_itMap++)<BR> {<BR> makeVec(*l_itMap);<BR> } <BR>}<BR>template <class T><BR>void delNoUseTemplate<T>::makeMap(T& t)<BR>{<BR> m_map.insert(make_pair(t,'S'));<BR>}<BR>template <class T><BR>void delNoUseTemplate<T>::makeVec(pair<T,char> p)<BR>{<BR> m_vec.push_back(p.first);<BR>}<BR><BR>#endif _DELNOUSETEMPLATE_<BR><BR>//delNoUse.cpp<BR>#include "delNoUse.h"<BR><BR>#ifndef _STD_IOSTREAM_<BR>#define _STD_IOSTREAM_<BR>#include <iostream><BR>#endif _STD_IOSTREAM_<BR><BR>#ifndef _STD_ALGORITHM_<BR>#define _STD_ALGORITHM_<BR>#include <algorithm><BR>#endif _STD_ALGORITHM_<BR><BR>using namespace std;<BR><BR>void print(int i)<BR>{<BR> std::cout<<i<<' ';<BR>}<BR><BR>void main(void)<BR>{<BR> int l_i[12]={1,1,2,5,3,2,1,0,98,337,22,337};<BR> vector<int> l_vec(l_i,l_i+12);<BR> delNoUseTemplate<int> l_delNoUseT(l_vec);<BR> l_vec=l_delNoUseT.getResult();<BR> for_each(l_vec.begin(),l_vec.end(),print);<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:天才 回复日期:2002-11-15 17:49:47
<br>内容:第二题<BR>//YSF.h<BR>#ifndef _YSF_H_<BR>#define _YSF_H_<BR><BR>#ifndef _STD_LIST_<BR>#define _STD_LIST_<BR>#include <list><BR>#endif _STD_LIST_<BR><BR>#ifndef _STD_IOSTREAM_<BR>#define _STD_IOSTREAM_<BR>#include <iostream><BR>#endif _STD_IOSTREAM_<BR><BR>using namespace std;<BR><BR>template <class T,int N><BR>class YSF<BR>{<BR>public:<BR> YSF();<BR> YSF(list<T> vec);<BR> void setVec(list<T> vec);<BR> ~YSF() {}<BR> void outputVec();<BR>private:<BR> list<T> m_vec;<BR>};<BR>template <class T,int N><BR>YSF<T,N>::YSF<T,N>()<BR>{<BR><BR>}<BR>template <class T,int N><BR>YSF<T,N>::YSF<T,N>(list<T> vec)<BR>{<BR> list<T>::iterator l_itVec;<BR> for(l_itVec=vec.begin();l_itVec!=vec.end();l_itVec++)<BR> {<BR> m_vec.push_back(*l_itVec);<BR> }<BR>}<BR>template <class T,int N><BR>void YSF<T,N>::setVec(list<T> vec)<BR>{<BR> list<T>::iterator l_itVec;<BR> for(l_itVec=vec.begin();l_itVec!=vec.end();l_itVec++)<BR> {<BR> m_vec.push_back(*l_itVec);<BR> }<BR>}<BR>template <class T,int N><BR>void YSF<T,N>::outputVec()<BR>{<BR> int l_i=0;<BR> list<T> l_vec=m_vec;<BR> list<T>::iterator l_itLT,l_itLTDel;<BR> l_itLT=l_vec.begin();<BR> while(l_vec.size()>0)<BR> {<BR><BR> for(l_i=0;l_i<N;l_i++)<BR> {<BR> l_itLTDel=l_itLT;<BR> if(l_itLT!=--l_vec.end())<BR> {<BR> l_itLT++;<BR> }<BR> else<BR> {<BR> l_itLT=l_vec.begin(); <BR> } <BR> }<BR> cout<<"I was deleted = "<<*l_itLTDel<<endl;<BR> l_vec.erase(l_itLTDel);<BR> }<BR>}<BR><BR>#endif _YSF_H_<BR><BR>//main.cpp<BR>#include "ysf.h"<BR><BR>using namespace std;<BR><BR>void main(void)<BR>{<BR> int l_i[12]={1,2,3,4,5,6,7,8,9,10,11,12};<BR><BR> list<int> l_list(l_i,l_i+8);<BR> YSF<int,4> l_ysf(l_list);<BR> l_ysf.outputVec();<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jw 回复日期:2002-11-22 11:03:05
<br>内容:THANKS.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:天才 回复日期:2002-11-22 13:34:21
<br>内容:Welcome!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -