你一定要好好看题,一定先要==||
#include<iostream>
#include<cstdio>
using namespace std;
int sum[15], tot, flag;
void DFS(int q) // q用来存现在分到的价值
{
int i;
if(flag)
return ;
if(q == tot) //如果价值==tot就是可以平分
{
flag = 1;
return ;
}
for(i = 10; i > 0; --i) //从后往前加,后边价值大
{
if(sum[i] > 0 && q+i <= tot) // i 是价值,sum【i】是i 这个价值的有几个~
{
sum[i]--; //加上一个就减去一个
DFS(q+i); //看q+i 是否够一半
if(flag)
return ;
}
}
}
int main()
{
int i, t;
for(t = 1; ; t++) //循环开始
{
tot = 0;
for(i = 1; i <= 10; i++)
{
cin >> sum[i];
tot += sum[i] * i; // sum【i】是i 这个价值的有几个!!tot总价值
}
if(!tot)
break; // 价值为零,循环结束,程序结束
if(tot & 1) //tot是奇数
{
printf("#%d:Can‘t be divided.\n", t);
continue;
}
tot >>= 1; // >>位运算里边的东西,可以百度一下,这句话意思就是tot /=2;
flag = false;
DFS(0);
if(flag)
printf("#%d:Can be divided.\n", t);
else printf("#%d:Can‘t be divided.\n", t);
}
return 0;
}
sum【i】是i 这个价值的珠宝有几个!!
~~
分享更好链接:
http://www.cnblogs.com/dongsheng/archive/2013/04/22/3036160.html