钱能c++程序设计教程第二版第六章.docx
- 文档编号:30535595
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:17
- 大小:17.69KB
钱能c++程序设计教程第二版第六章.docx
《钱能c++程序设计教程第二版第六章.docx》由会员分享,可在线阅读,更多相关《钱能c++程序设计教程第二版第六章.docx(17页珍藏版)》请在冰豆网上搜索。
钱能c++程序设计教程第二版第六章
可以在VS2010上运行,供正在学习C++的同学参考。
我也是新手,可能在编程风格和思路上有待提高,也有一些题目不知道该如何下手,路过的朋友知道的可以告诉我,我的邮箱是guosheng-14@,可以督促我继续写以后的答案。
vc++6.0可能在头文件上有所区别。
第六章
第一部分
//6.1.1—频繁调用小函数
#include
usingnamespacestd;
boolisnumber(charc){return((c>='0'&&c<='9')?
1:
0);}
intmain()
{
charch;
while(cin>>ch&&ch!
='\n')
{
if(isnumber(ch))cout< elsecout< } } //6.1.1—给成内联函数 #include usingnamespacestd; inlineboolisnumber(charc){return((c>='0'&&c<='9')? 1: 0);} intmain() { charch; while(cin>>ch&&ch! ='\n') { if(isnumber(ch))cout< elsecout< } } //6.2.3--栈法 #include #include #include #include usingnamespacestd; intmain() { ifstreamin("abc.txt"); for(intn,line=0;in>>n&&n&&in.ignore();) { cout<<(line++? "\n": ""); for(strings;getline(in,s)&&s! ="0";) { istringstreamsin(s); stack for(intlast=0,coach;sin>>coach;st.pop()) { for(intp=last+1;p<=coach;p++)st.push(p); if(last if(st.top()! =coach)break; } cout<<(! sin? "yes\n": "no\n"); } } } //6.3.2--Fibonacci #include #include #include #include usingnamespacestd; intf1(intn) { if(n==0)return0; if(n==1)return1; returnf1(n-1)+f1(n-2); } intf2(intn) { inta=0,c; for(intb=1,i=2;i<=n;i++)//一个书上的错误,c重定义了 c=a+b,a=b,b=c; returnc; } intf3(intn) { vector for(inti=2;i<=n;i++) v[i]=v[i-1]+v[i-2]; returnv[n]; } intf4(intn) { return(pow((1+sqrt(5.0))/2,n)-pow((1-sqrt(5.0))/2,n))/sqrt(5.0); } intmain() { inta; clock_tstart=clock(); for(inti=1;i<5;i++) a=f1(35); cout<<(clock()-start)/CLK_TCK< start=clock(); for(inti=1;i<5;i++) a=f2(35); cout<<(clock()-start)/CLK_TCK< start=clock(); for(inti=1;i<5;i++) a=f3(35); cout<<(clock()-start)/CLK_TCK< start=clock(); for(inti=1;i<5;i++) a=f4(35); cout<<(clock()-start)/CLK_TCK< } //6.4.2—矩形法 #include #include #include usingnamespacestd; doublef(doublex){return1/x;} doubles(doublea,double(*)(double)); intmain() { ifstreamin("in.txt"); ofstreamout("out.txt"); for(doublex;in>>x;) out< } doubles(doublea,double(*f)(double)) { doublelast=0; doubleresult=1; for(intn=4;abs(result-last)>0.0001;n*=2) { last=result; result=0; for(intj=0;j { doublepace=(a-1)/n; result+=pace*f(1+pace*j); } } returnlast; } //6.5.2—判断字串相等1 #include #include #include #include usingnamespacestd; intmain() { ifstreamin("in.txt"); for(strings,t;in>>s>>t;) { sort(s.begin(),s.end()); sort(t.begin(),t.end()); cout<<((s==t)? "yes": "no")< } } //6.5.2—判断字符串相等2 #include #include #include #include usingnamespacestd; intmain() { ifstreamin("in.txt"); for(strings,t;in>>s>>t;) { intsc0=count(s.begin(),s.end(),'0'); intsc1=count(s.begin(),s.end(),'1'); inttc0=count(t.begin(),t.end(),'0'); inttc1=count(t.begin(),t.end(),'1'); if(sc0==tc0&&sc1==tc1)cout<<"yes"< elsecout<<"no"< } } //6.5.2—判断字串相等3 #include #include #include #include usingnamespacestd; intmain() { ifstreamin("in.txt"); for(strings,t;in>>s>>t;) { intsc0=count(s.begin(),s.end(),'0'); inttc0=count(t.begin(),t.end(),'0'); if(sc0==tc0&&s.length()==t.length())cout<<"yes"< elsecout<<"no"< } } //6.5.5—剩余串排序1 #include #include #include #include #include usingnamespacestd; intmain() { ifstreamin("in.txt"); for(strings,t,u;in>>s>>t;u="") { sort(s.begin(),s.end()); sort(t.begin(),t.end()); set_difference(s.begin(),s.end(),t.begin(),t.end(),back_inserter(u)); cout< } } //6.5.6—剩余串排列2 #include #include #include #include #include usingnamespacestd; intmain() { ifstreamin("in.txt"); for(strings,t,u;in>>s>>t;) { sort(s.begin(),s.end()); for(inti=0;i if(t.find(s[i])==string: : npos)cout< cout< } } //6.6.1—预留向量空间 #include #include #include #include #include usingnamespacestd; typedefmultimap intmain() { ifstreamin("in.txt"); vector Mmapnums; intn=0; for(strings;getline(in,s);) { istringstreamsin(s); intnum=0; for(stringt;sin>>t;num++); if(num) { nums.insert(Mmap: : value_type(num,n++)); abc.push_back(s); } } for(Mmap: : iteratorit=nums.begin();it! =nums.end();it++) cout< } //6.6.2—素数判断---------------------------不要运行---------------几十分钟 #include #include usingnamespacestd; boolisprime(int); intmain() { intn=0; for(inti=2;i<100000000;i++) if(isprime(i))n++; cout< } boolisprime(intn) { intsqrtn=sqrt(n*1.0); for(inti=2;i<=sqrtn;i++) if(n%i==0)returnfalse; returntrue; } //6.6.3---素数判断技巧版 #include #include usingnamespacestd; intmain() { bitset<100000000>*p=newbitset<100000000>; p->set(); for(inti=2;i if(p->test(i)) for(intj=i*i;j p->reset(j); intnum=0; for(inti=0;i if(p->test(i)) num++; cout< } 低级编程这里不写了,根本不用看。 记住一句话: 算法和数据结构主要影响了C++效率,能用c++函数的地方尽量用。 第二部分 //1—素数排行—在例子的基础上加上几句代码而已 #include #include #include #include usingnamespacestd; intmain() { vector bitset<100000000>*p=newbitset<100000000>; p->set(); for(inti=2;i<10000;i++) if(p->test(i)) for(intj=i*i;j p->reset(j); intnum=0; for(inti=2;i if(p->test(i)) { num++; v[i]=num; } delete[]p; ifstreamin("in.txt"); for(intt;in>>t;)cout< } //2—第i位数字 #include #include #include usingnamespacestd; intmain() { vector set[0]=1; for(inti=1,h=1;i<231;i+=h) { set[i]=1; h++; } ifstreamin("in.txt"); vector intn; in>>n; test.resize(n); for(intt,i=0;in>>t;i++) test[i]=t; for(inti=0;i cout< cout< } 3.这个题,没看懂,颠来倒去能有无数种排列方法。 知道的同学发邮件给我。 //4—平均数 #include #include #include #include usingnamespacestd; inlineintadd(inta,intb){returna+b;} intmain() { intsum=0,n=0; ifstreamin("in.txt"); for(strings;getline(in,s);) { istringstreamsin(s); for(inta,b;sin>>a>>b;)sum+=add(a,b); n+=2; } cout< } //5—体操表演 #include #include #include usingnamespacestd; intmain() { ifstreamin("in.txt"); for(strings;getline(in,s);) { istringstreamsin(s); intn,x,y,r,m;sin>>n>>x>>y>>r>>m; if(x==1) { if(y==1)cout<<(m/r+1)<<""<<(m%r); if(y==2) {cout<<(m%r)<<""<<(m/r+1);} cout< } else { if(y==1)cout<<(m*2-1)/r+1<<""<<(m*2-1)%r; if(y==2)cout<<(m*2-1)%r<<""<<(m*2-1)/r+1; cout< } } } 6.正弦这个我也不太会 //7—对称 #include #include #include #include usingnamespacestd; intmain() { ifstreamin("in.txt"); for(strings;getline(in,s);) { if(s=="000000")break; stringt=s; for(inti=0;i { if(s[i]=='>')s[i]='%'; if(s[i]=='<')s[i]='>'; } for(inti=0;i if(s[i]=='%') s[i]='<'; reverse(s.begin(),s.end()); cout<<(s==t? "": "Not")<<"Symmetry"< } } 8—我实在是想不出来什么别的方法了,高手指教啊。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 程序设计 教程 第二 第六
![提示](https://static.bdocx.com/images/bang_tan.gif)