暴力枚举
#include<bits/stdc++.h>
using namespace std;
#define Max (int)(1e5+10)
typedef long long ll;
int p[100],a,b,c,num;
bool vis[25],key[25][25][25];
void bfs(int x,int y,int z,int step) {
if(key[x][y][z])
return;
else
key[x][y][z]=1;
if(x==0) {
if(vis[z]==0)
{
p[num++]=z;
vis[z]=1;
}
key[x][y][z]=1;
// return ; 就是这个地方卡了我好久,因为x=0,
//之后还能继续倒,还会在此基础上有很多情况,此时return 则会丢失许多情况
}
if(step>50)
return ;
if(x<a&&z>0)
if(a-x>=z)
bfs(x+z,y,0,step+1);
else
bfs(a,y,z-(a-x),step+1);
if(x<a&&y>0)
if(a-x>=y)
bfs(x+y,0,z,step+1);
else
bfs(a,y-(a-x),z,step+1);
if(y<b&&z>0)
if(b-y>=z)
bfs(x,y+z,0,step+1);
else
bfs(x,b,z-(b-y),step+1);
if(y<b&&x>0)
if(b-y>=x)
bfs(0,y+x,z,step+1);
else
bfs(x-(b-y),b,z,step+1);
if(z<c&&x>0)
if(c-z>=x)
bfs(0,y,z+x,step+1);
else
bfs(x-(c-z),y,c,step+1);
if(z<c&&y>0)
if(c-z>=y)
bfs(x,0,z+y,step+1);
else
bfs(x,y-(c-z),c,step+1);
}
int main() {
while(~scanf("%d%d%d",&a,&b,&c)) {
num=1;
memset(vis,0,sizeof vis);
memset(key,0,sizeof key);
p[0]=c;
vis[c]=1;
key[0][0][c]=1;
if(a<=c)
bfs(a,0,c-a,0),key[a][0][c-a]=1;
else
bfs(c,0,0,0),key[c][0][0]=1;
if(b<=c)
bfs(0,b,c-b,0),key[0][b][c-b]=1;
else
bfs(0,c,0,0),key[0][c][0]=1;
sort(p,p+num);
for(int i=0; i<num-1; i++)
printf("%d ",p[i]);
printf("%d\n",p[num-1]);
}
}