钱能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);
stackst;
for(intlast=0,coach;sin>>coach;st.pop())
{
for(intp=last+1;p<=coach;p++)st.push(p);
if(lastif(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)
{
vectorv(n+1,0);v[1]=1;
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;iif(t.find(s[i])==string:
:
npos)cout<
cout<}
}
//6.6.1—预留向量空间
#include
#include
#include
#include
#include
usingnamespacestd;
typedefmultimapMmap;
intmain()
{
ifstreamin("in.txt");
vectorabc;
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<second]<}
//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;isize();i++)
if(p->test(i))
for(intj=i*i;jsize();j+=i)
p->reset(j);
intnum=0;
for(inti=0;isize();i++)
if(p->test(i))
num++;
cout<}
低级编程这里不写了,根本不用看。
记住一句话:
算法和数据结构主要影响了C++效率,能用c++函数的地方尽量用。
第二部分
//1—素数排行—在例子的基础上加上几句代码而已
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
vectorv(100000000,0);
bitset<100000000>*p=newbitset<100000000>;
p->set();
for(inti=2;i<10000;i++)
if(p->test(i))
for(intj=i*i;jsize();j+=i)
p->reset(j);
intnum=0;
for(inti=2;isize();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()
{
vectorset(231,0);
set[0]=1;
for(inti=1,h=1;i<231;i+=h)
{
set[i]=1;
h++;
}
ifstreamin("in.txt");
vectortest;
intn;
in>>n;
test.resize(n);
for(intt,i=0;in>>t;i++)
test[i]=t;
for(inti=0;icout<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;iif(s[i]=='%')
s[i]='<';
reverse(s.begin(),s.end());
cout<<(s==t?
"":
"Not")<<"Symmetry"<}
}
8—我实在是想不出来什么别的方法了,高手指教啊。