hdu1085 Holding Bin-Laden Captive!

/...................................................................................................................................................................................................................................................................................\

题目分析:

               题意:不能用num_1,num_2,num_3这三个数组和成最小的数。

                       即就是求母函数G(x)=(1+x+.....+x^num_1)(1+x^2+....+x^(2*num_2))(1+x^5+....X^(5*num_3))的展开式的 系数为零的指数; 若系数都不为零,则最小数为s+1;

错误分析:

                开始没完全理解题目的意思,开始时把题目的num_1、num_2、num_3输入要求理解为scanf("%d %d %d",&num_1,&num_2,&num_3),num_1&&num_2&&num_3),导致Runtime Error(ACCESS_VIOLATION)好几次,找了好长时间都没找到错误,又从新把代码写了一遍还是没有通过后来找大神看代码才知道,num_1、num_2、num_3 的输入要请是三个数同时为0时,程序不执行,改过之后在提交一次就AC了。


\.................................................................................................................................................................................................................................................................................../

代码:

#include<stdio.h>
#include <iostream>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<list>
#include<vector>
#pragma comment(linker,"/STACK:102400000,102400000")
using namespace std;
#define MAX 80005
int c1[MAX],c2[MAX];

int main()
{
   int i,j,max,num_1,num_2,num_3;
   while(scanf("%d%d%d",&num_1,&num_2,&num_3),num_1||num_2||num_3)
   {
       max=num_1*1+num_2*2+num_3*5;
       for(i=0;i<=max;i++)
       {
           c1[i]=0;
           c2[i]=0;
       }
       for(i=0;i<=num_1;i++)     //为(1+x+.....+x^num_1)的系数赋初时值为1.
       {
           c1[i]=1;
       }
     for(i=0;i<=num_1;i++)      //(1+x+……+x^num_1)(1+x^2+…… x^(2*num_2))的系数;
       {
           for(j=0;j<=num_2*2;j+=2)
           {
               c2[j+i]+=c1[i];
           }
       }
       for(i=0;i<=num_2*2+num_1*1;i++)            //改变范围变为(num_1*1+num_2*2)
       {
           c1[i]=c2[i];
           c2[i]=0;
       }
       for(i=0;i<=num_1*1+num_2*2;i++)      //(1+x+.....+x^num_1)(1+x^2+....+x^(2*num_2))(1+x^5+....X^(5*num_3))的系数;    
       {
           for(j=0;j<=num_3*5;j+=5)
           {
               c2[j+i]+=c1[i];
           }
       }
       for(i=0;i<=max;i++)   //改变范围变为max=num_1*1+num_2*2+num_3*3;
       {
           c1[i]=c2[i];
           c2[i]=0;
       }
        for(i=0; i<=max; i++)
            if(c1[i] == 0)
            {
                printf("%d\n",i);
                break;
            }
        if(i == max+1)
            printf("%d\n", i);
   }
    return 0;
}







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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值