写题相关板子,持续更新

#include<iostream>
#include<queue>
#include<string>
using namespace std;

/****************最大公约数***************/

//1.短除法
int enum_max_common_divisor(int a, int b) //大的为b
{
	for (int i = a; i >= 1; i--)
	{
		if (a%i == 0 && b%i == 0)
			return i;
	}
}

//2.辗转相除法
int max_common_divisor(int a, int b)
{
	if (a == 0) return b;
	return max_common_divisor(b%a, a);
}

/**************最小公倍数****************/
int min_common_multiple(int a, int b)
{
	return a * b / max_common_divisor(a, b);
}

//菲波那切数列
int fib(int index)
{
	if (index == 1 || index == 2) {
		return 1;
	}
	else {
		return fib(index - 1) + fib(index - 2);
	}
}

//n的阶乘
int jiecheng(int index)
{
	if (index == 1)return 1;
	else
	{
		return index * jiecheng(index - 1);
	}
}

//李白打酒
int total = 0;
int a(int s, int f, int d)
{
	if (s > 0) //当店大于0,就行搜索   
		a(s - 1, f, d * 2); //return a(s-1,f,d*2); 

	if (f > 1) //花大于1,进行搜索   
		a(s, f - 1, d - 1);

	if (s == 0 && f == 1 && d == 1) //保证最后一次遇见的是花 此时还剩下1斗酒   
		total++;

	return total;
}

//39次台阶
int sum = 0;
void count(int n, int m)
{
	if (n == 0 && m % 2 == 0)
		sum++;
	if (n < 0)
		return;
	count(n - 1, m + 1);
	count(n - 2, m + 1);
}

//图的相关定义
char mp[30][50]; //地图
bool vis[30][50]; //标记该点是否走过
int dir[4][2] = { {1,0},{0,-1},{0,1}, {-1,0} }; //方向数组按照下,左,右,上顺序
char dirc[4] = { 'D','L','R','U' };
int n, m; // 迷宫的行列
struct node {
	int x;//横坐标
	int y;//纵坐标
	int step;//步数;
	string str; //路径
	node(int xx, int yy, int ss, string s) {
		x = xx;
		y = yy;
		step = ss;
		str = s;
	}
};
queue<node> q;
bool check(int x, int y)
{
	if (x < 0 || x >= n || y < 0 || y >= m || vis[x][y] || mp[x][y] == '1') {
		return false;
	}
	return true;
}

//广搜bfs
void bfs(int x, int y)
{
	q.push(node(x, y, 0, ""));
	vis[x][y] = true;
	while (!q.empty) {
		node now = q.front();
		//到达终点
		if (now.x == n - 1 && now.y == m - 1) {
			cout << now.str << endl;
			cout << now.step << endl;
			break;
		}
		q.pop();
		for (int i = 0; i < 4; i++) {
			int nx = now.x + dir[i][0];
			int ny = now.y + dir[i][1];
			if (check(nx, ny))
			{
				q.push(node(nx, ny, now.step + 1, now.str + dirc[i]));
				vis[nx][ny] = true;
			}
		}
	}
}

//判断素数
int isprime(int n)
{
	if (n == 1) return 0;
	int i;
	for (i = 2; i*i <= n; i++)
	{
		if (n%i == 0)
			return 0;
	}
	return 1;
}

int main()
{
	printf("%d", a(5, 10, 2)); //初始化为最初有 5个店 10个花 2斗酒   
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值