计算机考研机试指南第二版(王道)(暴力求解)

编者的话:显示目录记得在最开始加上在这里插入图片描述

暴力求解(第二章)

2.1枚举

1abc
#include <iostream>
using namespace std;
int main(){
	int a,b,c;
/*
	因为num1=a*100+b*10+c;num2=b*100+c*10+c;即两数之和为num=100*a+110*b+12*c; 
*/ 
	for(a=0;a<=9;a++){
		for(b=0;b<=9;b++){
			for(c=0;c<=9;c++){

				if(100*a+110*b+12*c==532){
					cout<<a<<" "<<b<<" "<<c<<endl;
				}
			}
		}
	}
	return 0;
}
2反序数
#include <iostream>
using namespace std;

//求反序数
int reverse(int n){
	int revn=0;
	while(n){
		revn*=10;
		revn+=n%10;
		n/=10;
	}
	return revn;
}
 
int main(){
	for(int i=1000;i<=9999;i++){
		if(i*9==reverse(i)){
			cout<<i<<endl;
		}
	}
	return 0;
}
3对称平方数1
#include <iostream>
#include <cmath> 
using namespace std;
//是否对称,即他的反序数==他本身 
//输出反序数 
int reverse(int n){
	int revn=0;
	while(n){
		revn*=10;
		revn+=n%10;
		n/=10;
	}
	return revn;
} 

int main(){
	int i,s;
	for(i=0;i<=256;i++){
		s=pow(i,2);
		if(s==reverse(s)){
			cout<<i<<endl;
		}
	}
	return 0;
} 
4与7无关的数
#include <iostream>
#include <cmath>
using namespace std;
//某个位置为7
bool is7(int n){
	while(n){
		if(n%10==7){
			return true;
		}
		n/=10;
	}
	return false;
} 

//与7相关
bool relate7(int n){
	if(n%7==0||is7(n)){
		return true;
	}
	return false;
}
 
int main(){
	int n,i,sum=0;
	cin>>n;
	for(i=1;i<=n;i++){
		if(!relate7(i)){
			sum+=pow(i,2);
		}
	}
	cout<<sum;
	return 0;
}
5百鸡问题
#include <iostream>
using namespace std;

int main(){
	int x,y,z,n;
	cin>>n;
//x+y+z=100,且注意因为是int数防止1/3变为0,要把5*x+3*y+ 1/3*z<=n写成5*x*3+3*y*3+1*z<=3*n,二重遍历
	for(x=0;x<=100;x++){
		for(y=0;y<=100-x;y++){
			z=100-x-y;
			if(5*x*3+3*y*3+1*z<=3*n){
				cout<<x<<" "<<y<<" "<<z<<endl;
			}
		}
	}
	return 0;
}
6Old Bill
#include <iostream>
using namespace std;

int main(){
//价格为axyzb,共有n只,即总价格从大到小,第一个满足(a*10000+x*1000+y*100+z*10+b)%n==0,即最大单价 
	int n,x,y,z,a,b,sum;
	bool flag;
	while(cin>>n){
		cin>>x>>y>>z;
		flag=false;
		for(a=9;a>=1;a--){
			for(b=9;b>=0;b--){
				sum=a*10000+x*1000+y*100+z*10+b;
				if(sum%n==0){
					cout<<a<<" "<<b<<" "<<sum/n;
					flag=true;
					break;
				}
			}
			if(flag){
				break;
			}
		}
		if(!flag){
			cout<<"没有";
		}
	}
	return 0;
}

2.2模拟

1图形排版
1输出梯形
#include <iostream>
using namespace std;

int main(){
	int h;
	while(cin>>h){
		int row=h;
		int col=h+(h-1)*2;
		for(int x=0;x<row;x++){
			for(int y=0;y<col;y++){
				if(y<col-(h+2*x)){
					cout<<" "; 
				}else{
					cout<<"*";
				}
			}
			cout<<endl;
		}
	}
	return 0;
}
2叠框
#include <iostream>
using namespace std;

char matrix[80][80];

int main(){
/*
	由外圈向内圈赋值,先补全最外圈四个角,最后再去掉。 
	由(i,i)指圈左上角,(j,j)指圈右下角,最外框为(0,0),(n-1,n-1),最内圈为一个字符(n/2,n/2) ,且i+j=n-1,框的长度为n-2*i; 
	确定花纹填充,由内到外第几圈,对左上角为(i,i)通过(n/2-i) %2来判断 
*/
	int n;
	char a,b;
	bool flag=true;//判断是否为第一组数据
	while(cin>>n>>a>>b){
		if(flag){
			flag=false;
		}else{
			cout<<endl;
		}
		
		for(int i=0;i<=n/2;i++){
			int j=n-1-i;
			int length=n-2*i;//边框长度 
			char c;//边框花纹
			//判断花纹
			if((n/2-i)%2==0){
				c=a;
			}else{
				c=b;
			}
			//为当前圈赋值
			for(int k=0;k<length;k++){
				matrix[i][i+k]=c;
				matrix[i+k][i]=c;
				matrix[j][j-k]=c;
				matrix[j-k][j]=c;
			} 
		}
		//把四个角去掉,若n为1则不用去 
		if(n!=1){
			matrix[0][0]=' ';
			matrix[0][n-1]=' ';
			matrix[n-1][0]=' ';
			matrix[n-1][n-1]=' ';
		}
		//打印
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				cout<<matrix[i][j];
			}
			cout<<endl;
		} 
	} 
	return 0;
}
3Repeater
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值