20求调
查看原帖
20求调
1284180
yyz0526楼主2025/2/8 13:21

枚举6种情况但就是错

#include<bits/stdc++.h>
using namespace std;
bool v[21][21][21],f[21];
int a,b,c;
void bfs(int A,int B,int C)
{
	if(v[A][B][C]==1) return;//标记 
	else v[A][B][C]=1;
	if(A==0&&!f[C]) f[C]=1;
	if(a-A>=C) bfs(A+C,B,0);//C倒给A 
	else if(a-A<C) bfs(a,B,C+A-a);
	if(b-B>=C) bfs(A,B+C,0);//C倒给B 
	else if(b-B<C) bfs(A,b,C+B-b);
	if(a-A>=B) bfs(A+B,0,C);//B倒给A 
	else if(a-A<B) bfs(a,B+A-a,C);
	if(c-C>=B) bfs(A,0,B+C);//B倒给C 
	else if(c-C<B) bfs(A,B+C-c,c);
	if(b-B>=A) bfs(0,A+B,C);//A倒给B 
	else if(b-B<A) bfs(A+B-b,b,C);
	if(c-C>=A) bfs(0,B,C+A);//A倒给C 
	else if(c-C<A) bfs(A+C-c,B,c);
}
int main()
{
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	bfs(0,0,c);
	for(int i=c-b;i<=c;i++)//从最小开始输出 
	{
		if(f[i])
			printf("%d ",i);
	}
	return 0;
}

QAQ

2025/2/8 13:21
加载中...