赞
踩
第一题:暴力
tips:一开始用直接用题目中的带有小数点的数据运行不出来,上下乘以10以后再计算就出来了,所以说,在蓝桥杯比赛中对于这种只需要填出最终结果的小题,能用整形就用整形,避免浮点型的数以防出错。
#include<iostream>
using namespace std;
int main(){
int a=82.3/1.9;
for(int yl=1;yl<=a;yl++){
for(int pj=1;pj<=yl;pj++){
if(pj*2.3+yl*1.9==82.3){
cout<<pj<<endl;
}
}
}
return 0;
}
第二题:数学
找出通项:y=2^i+1,i表示剪了多少刀
。
y=2^10+1=1025
第三题:
递归求解。
#include<iostream>
using namespace std;
int ans=0;
void dfs(int index,int store,int flower,int wine){
if(index>14){return ;}
if(index==14){
if(store==5&&flower==9&&wine==1){
ans++;
}
}
//遇到店
dfs(index+1,store+1,flower,2*wine);
//遇到花
dfs(index+1,store,flower+1,wine-1);
}
int main(){
dfs(0,0,0,2);
cout<<ans<<endl;
return 0;
}
第四题:
if(r>0) return i;
第五题:
可以多次尝试,凑出答案
f(a,rank-1,row,cow+w/2)
第六题:
暴力枚举,小心这里数据,不要用除法,条件判断那里可以用乘法替代。
注意精度的问题:
if(1.0*a*d/b/c==1.0*(10*a+d)/(10*b+c)) //不要忘记乘以1.0
#include<iostream>
using namespace std;
int ans=0;
int main(){
for(int a=1;a<=9;a++){
for(int b=1;b<=9;b++){
for(int c=1;c<=9;c++){
for(int d=1;d<=9;d++){
if(a*d*(10*b+c)==(10*a+d)*b*c && (a!=b||(c!=d))){
ans++;
}
}
}
}
}
cout<<ans<<endl;
return 0;
}
第七题:
dfs
#include<iostream>
using namespace std;
bool vis[9];
int num[9]={2,4,5,6,7,9,10,11,12};
int a[9];
int ans=0;
void pd(){
int t1=1+a[0]+a[8]+a[4];
int t2=a[4]+a[5]+a[6]+a[7];
int t3=1+a[1]+a[3]+a[7];
int t4=8+a[0]+a[1]+a[2];
int t5=a[2]+a[3]+a[6]+3;
int t6=8+a[8]+a[5]+3;
if(t1==t2 &&t2==t3 && t3==t4 && t4==t5 &&t5==t6 ){
cout<<a[8]<<endl;
}
}
void dfs(int index){
if(index==9){
pd();
return ;
}
for(int i=0;i<9;i++){
if(!vis[i]){
vis[i]=true;
a[index]=num[i];
dfs(index+1);
vis[i]=false;
}
}
}
int main(){
dfs(0);
return 0;
}
也可以用全排列解决这道题目。
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[13]={0};
for(int i=0;i<12;i++)
a[i]=i+1;
while(next_permutation(a,a+12))
{
int t=a[1]+a[2]+a[3]+a[4];
if(a[0]==1&&a[1]==8&&a[11]==3&&t==a[7]+a[8]+a[9]+a[10]&&t==a[0]+a[2]+a[5]+a[7]
&&t==a[4]+a[6]+a[9]+a[11]&&t==a[1]+a[5]+a[8]+a[11]&&t==a[0]+a[3]+a[6]+a[10])
{
cout<<a[5];
}
}
return 0;
}
第九题:dfs
这道题和李白喝酒那道题比较类似,可以结合的看一下。
#include<iostream>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int a[100][100];
ll ans;
int n,m,k;
void dfs(int x,int y,int pre,int max){
if(pre>k) return ;
if(x==n-1 && y==m-1){
//走到终点的时候要么恰好拿了k件,或者拿到了k-1件,最后一个礼物大于之前任何礼物的价值
if(pre==k || (pre==k-1 && max<a[x][y])){
ans++;
}
return ;
}
if(x<n-1){ //向下走
if(a[x][y]>max)
dfs(x+1,y,pre+1,a[x][y]);
dfs(x+1,y,pre,max);
}
if(y<m-1){ //向右走
if(a[x][y]>max)
dfs(x,y+1,pre+1,a[x][y]);
dfs(x,y+1,pre,max);
}
}
int main(){
while(cin>>n>>m>>k){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
ans=0;
dfs(0,0,0,-INF);
cout<<ans%1000000007<<endl;
}
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。