poj1484---判断保险丝是否烧断

题目输入要求:

2 2 10 //设备数n  接下来的操作数m   保险丝能承受最大电流c
5 //电器1的电流
7 //2的电流
1 //反转开关1
2 //反转开关2

思路:设置一个flag数组,记得每次进入一个数据集,重新设为0,flag从1开始,flag[1]...flag[n]模拟开关状态

将每个device的电流分别存到ci数组里,从1开始存ci[1],存到ci[n],不管ci[0],n<=20,随便给个 大于21的数

接着,再用一个for循环,读入device序号,如果flag[dev]==0,flag反转为开,ci_total加上对应序号设备的电流ci[dev]

设备序号dev                   1      2      3      4        5     6

ci[]设备对应电流     7      4      5      9        2     8

flag[]设备状态                 0      0      1      0        1     0

数组序号                  0     1      2      3      4        5      6

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
    int n,m,c,i,count=0;
    int flag[25],ci[1000];
    while(scanf("%d%d%d",&n,&m,&c)!=EOF)
    {
        int ci_total=0;
        if(n==0&&m==0&&c==0)
            break;
        memset(flag,0,sizeof(flag));
        for(i=1;i<n+1;i++)
        {
            scanf("%d",&ci[i]);
        }
        int max=0;
        for(i=1;i<m+1;i++)
        {
            int dev;
            scanf("%d",&dev);
            if(flag[dev]==0)
            {
                flag[dev]=1;//反转状态
                ci_total+=ci[dev];//
            }
            else
            {
                flag[dev]=0;
                ci_total-=ci[dev];
            }
            if(ci_total>max)//如果在过程中,出现了max>c情况接下来的数据输入只可能让他更高,不可能变小,所以,就算比当前大于大于max的数还大,循环出来也是会>c
                max=ci_total; //没有遇到max>c就没有呗
        }
        if(max>c)
        {
            printf("Sequence %d\n",++count);
            printf("Fuse was blown.\n");
            printf("\n");
        }
        else
        {
            printf("Sequence %d\n",++count);
            printf("Fuse was not blown.\n");
            printf("Maximal power consumption was %d amperes.\n",max);
            printf("\n");
        }
    }
    return 0;
}

  WA三次,原因memset函数没搞清楚

memset包含于头文件:#include <string.h>,属于字符串处理函数

memset(数组地址,所需要赋的值,所需赋的数组大小,通常是sizeof(数组名)或者sizeof(flag[0]*m))

sizeof(flag[0]*m)表示将数组从给的地址开始的m个元素赋值

posted @ 2015-05-02 21:00  Gabyler  阅读(237)  评论(0编辑  收藏  举报