啤酒和饮料
枚举
#include<bits/stdc++.h>
using namespace std;
int main()
{
int ans;
double p=1,y=1;
double vp=2.3,vy=1.9;
double temp=p*vp+y*vy;
for(p;p<100;p++)
{
for(y=1;y<100;y++)
{
temp=p*vp+y*vy;
if(temp==82.3)
{
cout<<p<<" "<<y<<endl;
return 0;
}
if(temp>82.3) break;
}
}
}
切面条
递推公式即可
#include<bits/stdc++.h>
using namespace std;
int main()
{
//1-3 2-5 3-9
//1 2 3
int f[14]={2,3};
for(int i=2;i<11;i++)f[i]=f[i-1]*2-1;
cout<<f[10];
}
李白打酒
bfs搜索到最后情况即可,题目已经给了要求了,我们判断一下就好了
#include<bits/stdc++.h>
using namespace std;
int ans=0;
//a店5次 b花10次
void fun(int val,int a,int b,int time)
{
if(time==14&&a==5&&b==9)
{
if(val==1)ans++;
return;
}
if(a!=5)fun(val*2,a+1,b,time+1);
if(b!=9)fun(val-1,a,b+1,time+1);
}
int main()
{
fun(2,0,0,0);
cout<<ans;
}
打印图形
#define N 70
void f(char a[][N], int rank, int row, int col)
{
if(rank==1){
a[row][col] = '*';
return;
}
int w = 1;
int i;
for(i=0; i<rank-1; i++) w *= 2;
f(a,rank-1,row,col+w/2);;//答案
f(a, rank-1, row+w/2, col);
f(a, rank-1, row+w/2, col+w);
}
奇怪的分式
深搜 判断条件即可~~
#include<bits/stdc++.h>
using namespace std;
int num[4]={0};
int flag[10]={0};
int ans=0;
bool check()
{
if(num[0]==num[1]||num[2]==num[3])return false;
int A=num[0]*num[2];
int B=num[1]*10+num[3];
int C=num[0]*10+num[2];
int D=num[1]*num[3];
if(A*B==C*D)return true;
return false;
}
void dfs(int cur)
{
if(cur==4)
{
if(check())ans++;
return ;
}
for(int i=1;i<=9;i++)
{
num[cur]=i;
dfs(cur+1);
}
return ;
}
int main()
{
dfs(0);
cout<<ans<<endl;
}
六角填数
发现这一届好爱考深搜啊。。
#include<bits/stdc++.h>
using namespace std;
int flag[13]={0};
int num[13]={0};
void dfs(int cur)
{
if(cur>12)
{
int A=num[2]+num[3]+num[4]+num[5];
int B=num[8]+num[9]+num[10]+num[11];
int C=num[1]+num[3]+num[6]+num[8];
int D=num[1]+num[4]+num[7]+num[11];
int E=num[5]+num[7]+num[10]+num[12];
int F=num[2]+num[6]+num[9]+num[12];
if(A==B&&B==C&&C==D&&D==E&&E==F)
{
cout<<num[6]<<" ";
for(int i=1;i<=12;i++)
{
cout<<num[i]<<" ";
}
cout<<endl;
return;
}
return;
}
if(cur==1||cur==2||cur==12)
{
dfs(cur+1);
return;
}
if(cur!=1&&cur!=2&&cur!=12)
for(int i=1;i<=12;i++)
{
if(flag[i]==0)
{
// cout<<"1"<<endl;
num[cur]=i;
flag[i]=1;
dfs(cur+1);
//一般要重置标记数组 都在递归结束后
flag[i]=0;
}
}
}
int main()
{
flag[8]=1,flag[3]=1,flag[1]=1;
num[1]=1,num[2]=8,num[12]=3;
dfs(1);
}
蚂蚁感冒
思维题
在感冒蚂蚁左边往右走必定感冒
在感冒蚂蚁右边往左走必定感冒
如果感冒蚂蚁往左走但是左边没有蚂蚁则没有新的感冒
往右走同理
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num[60];
int n;
cin>>n;
vector<int>lfnum;
vector<int>rfnum;
int L=0,R=0;
int start=0;
int f=0;
for(int i=0;i<n;i++)
{
cin>>num[i];
if(i==0)
{
start=num[i];
if(start>0) f=1;
else f=-1;
continue;
}
//往右走且位于初始点的左边
if(num[i]>0&& abs(num[i]) <abs(start) )
{
L++;
}
//往左走且位于初始点的右边
if(num[i]<0&&abs(num[i])>abs(start))
{
R++;
}
}
if((f==1&&R==0)||(f==-1&&L==0))
{
cout<<1;
}
else cout<<R+L+1;
// cout<<R+L+1;
}
史丰收速算
if(r>0)return i ;
地宫取宝
记忆搜索 不会QAQ
小朋友排队
逆序数 不会QAQ