第四章1

穷举法练习

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;
}


 


 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值