首页 新闻 会员 周边 捐助

该死的算法题,整了老子两天了,呜呜。。。。

0
悬赏园豆:30 [已关闭问题] 关闭于 2014-06-29 16:00
完美世界最新的客户端游戏大作笑傲江湖最近已经开始测试了,由于希望参与的玩家太多,只能使用激活码的方式让一部分玩家可以参与测试,现在需要一个测试码的生成规则。
如从一组不重复的数字中获得随机几个数字组成验证码,其中只要是这些数字相加的和为相同的那么就认为是同一组验证码,最后希望获得一共有多少组有效验证码。
现在希望获得从一组N不同的数字中,获得和为C 的组个的个数。组合的个数有可能是1个 有可能是N个 。
输入格式
第一行输入1个整数M,表示总得数据组数。
第二行输入1个整数 2 < N < 100,表示需要输入的不同的数字的个数
第三行输入1个整数 C ,表示数字的和
第四行输入N个不同数字(数字>0)中间用逗号隔开, 0 < 单个数字 <= 100

测试格式
按照和为result 的验证码的总数量。

输入样例:
2
4
3
11 ,2, 3, 1
3
3
1,2,3

输出样例
2
2
给个清晰的思路吧,大神!
tt_tt--->的主页 tt_tt---> | 初学一级 | 园豆:19
提问于:2014-06-29 14:03
< >
分享
所有回答(1)
0

#include<stdio.h>
#include<string.h>
int C,b[200],count;
void solve(int n,int sum)
{
int i;
if(n>C||n<0);
else
{
if(sum>C);
else if(sum==C)
count++;
else
{
solve(n-1,sum);
for(i=0;i<b[n];i++)
{
sum+=n;
solve(n-1,sum);
}
}
}
return;
}
int main()
{
int M,N,m,i;
while(scanf("%d",&M)!=EOF)
while(M--)
{
count=0;
memset(b,0,sizeof(b));
scanf("%d%d",&N,&C);
for(i=0;i<N;i++)
{
scanf("%d,",&m);
b[m]++;
}
solve(C,0);
printf("%d\n",count);
}
return 0;
}

呵呵的笑了!

tt_tt---> | 园豆:19 (初学一级) | 2014-06-29 15:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册