蓝桥杯第五届省赛C/C++B组个人题解

啤酒和饮料

枚举

#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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优秀班委选举系统 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace 优秀班委选举 { public partial class Form1 : Form { private ListBox listBox; public Form1() { InitializeComponent(); } public Form1(ListBox listBox) { InitializeComponent(); this.listBox = listBox; } private void button1_Click(object sender, EventArgs e) { if (listBox1.Items.Count > 0) { if (listBox1.SelectedItem == null) { MessageBox.Show("请先选择一个对象!"); } else { //获取左边listBox1中选中的内容 string cont = listBox1.SelectedItem.ToString(); //左边listBox1中删除选中的内容 listBox1.Items.Remove(cont); //把获得的内容加入到右边的listBox2中 listBox2.Items.Add(cont); } } } private void button2_Click(object sender, EventArgs e) { if (listBox2.Items.Count > 0) { if (listBox2.SelectedItem == null) { MessageBox.Show("请先选择一个对象!"); } else { //获取右边listBox2中选中的内容 string cont = listBox2.SelectedItem.ToString(); //右边listBox2中删除选中的内容 listBox2.Items.Remove(cont); //把获得的内容加入到左边的listBox1中 listBox1.Items.Add(cont); } } } //退出 private void button5_Click(object sender, EventArgs e) { Application.Exit(); } //显示结果 private void button4_Click(object sender, EventArgs e) { //传递listBox2到Form2窗口中 Form2 form2 = new Form2(listBox2); form2.Show(); } //修改名单 private void button3_Click(object sender, EventArgs e) { if (listBox2.SelectedItem == null) { MessageBox.Show("请先选择一个对象!"); } else { string cont = listBox2.SelectedItem.ToString(); int index = listBox2.SelectedIndex; Form3 form3 = new Form3(cont, index, listBox2); form3.Show(); this.Hide(); } } //加载窗口 private void Form1_Load(object sender, EventArgs e) { if (listBox != null) { foreach (string str in listBox.Items) { listBox2.Items.Add(str); } } } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值