穷举法练习
1:鸡兔同笼36,共计100足,问鸡兔各几何?
#include<iostream>
using namespace std;
int main()
{
int n,i;
cout<<"共有36只鸡和兔子,总共100只脚,它们的数量分别为:"<<endl;
for(i=0;i<=25;i++)
{
n=36-i;
if(4*i+(36-i)*2==100)
{
cout<<"兔子的数目为 "<<i<<" ("<<4*i<<"足)"<<endl;
cout<<"鸡的数目为 "<<36-i<<" ("<<2*(36-i)<<"足)"<<endl;
}
}
return 0;
}
2:您有朋友给你n元钱,叫你给他换一些零钱,给出你有多少种换法?
#include<iostream>
using namespace std;
int main()
{
int n,i,k,z=0;
cout<<"请输入所给的钱,单位为元 ";
cin>>n;
n*=10;
for(i=0;i<=n;i++)
{
for(k=0;k<=n;k++)
if(n-5*i-2*k>=0)
{
z++;
cout<<"第"<<z<<"种换法为"<<endl;
cout<<"一毛钱张数为 "<<n-5*i-2*k
<<"两毛钱张数为 "<<k
<<"五毛钱张数为 "<<i<<endl;
}
}
return 0;
}
第三题我想应该是简单的算术问题,就不写了
4:在近期电视节目“最强大脑”世界大赛中,中国雨人周玮在二分多种时间里用心算判断2个4位数是否是质数,请你输入2个四位数,判断是否是质数要经过多少次除法运算?
这个我只会算是不是质数
#include<iostream>
using namespace std;
int main()
{
kaishi:
int i,n;
cout<<"请输入一个大于1的数";
cin>>n;
for(i=2;i<n;i++)
if(n%i==0)
break;
if(i==n)
cout<<"这个数是质数,需要经过"<<i/2<<"次算法"<<endl;
else
cout<<"这个数不是质数,需要经过"<<i-1<<"次算法"<<endl;
goto kaishi;
return 0;
}
5:小斌有一个QQ帐号密码是一个5位数。但因长时间没使用了,他将密码给忘了。但小斌生日是8月1日出生,而爸爸的生日则是9月1日,小斌记得是把同时是8l和9l的倍数用作密码,还记得这个密码的中间一位(百位数)是l。你能设计一个程序帮他找回这个密码吗?
#include<iostream>
using namespace std;
int main()
{
int n,i,k;
for(i=1;i<100000/91;i++)
{
n=81*i;
if(n%91==0)
{
k=n/100;
if(k%10==1)
cout<<"这个密码是 "<<n<<endl;
}
}
return 0;
}
例题,4.3,使用冒泡法找最大值
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a[10],i,t;
cout<<"请输入10个数";
for(i=0;i<10;i++)
cin>>a[i];
cout<<"这些数是";
for(i=0;i<10;i++)
cout<<setw(4)<<a[i];
cout<<endl;
for(i=0;i<9;i++)
if(a[i]>a[i+1])
a[i+1]=a[i];
cout<<"最大值为 "<<a[i]<<endl;
return 0;
}
例题4.4使用选择排序法排列
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a[10],i,j,t,min;
cout<<"请输入10个数";
for(i=0;i<10;i++)
cin>>a[i];
cout<<"这些数是";
for(i=0;i<10;i++)
cout<<setw(4)<<a[i];
cout<<endl;
for(i=0;i<10;i++)
{
min=i;
for (j=i+1;j<10;j++)
if(a[j]<a[min])
min=j;
if(min!=i)
{t=a[i],a[i]=a[min],a[min]=t;}
}
cout<<"这些数从小到大为:";
for(i=0;i<10;i++)
cout<<setw(5)<<a[i];
cout<<endl;
return 0;
}
例题4.5,使用两种方法
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a;
cout<<"请按1或其它选择你要看的算法模式";
cin>>a;
if(a==1)
{
cout<<"这是运用以为数组处理"<<endl;
int i,f[40]={1,1};
for(i=2;i<40;i++)
f[i]=f[i-1]+f[i-2];
for(i=0;i<40;i++)
{
if(i%4==0)
cout<<endl;
cout<<setw(12)<<f[i];
}
}
else
{
cout<<"这是运用一般算法处理"<<endl;
int i,f1=1,f2=1;
for(i=1;i<=20;i++)
{
cout<<setw(12)<<f1<<setw(12)<<f2;
if(i%2==0)
cout<<endl;
f1=f1+f2;
f2=f1+f2;
}
}
cout<<endl;
return 0;
}