zoukankan      html  css  js  c++  java
  • 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
    ",++count);
                printf("Fuse was blown.
    ");
                printf("
    ");
            }
            else
            {
                printf("Sequence %d
    ",++count);
                printf("Fuse was not blown.
    ");
                printf("Maximal power consumption was %d amperes.
    ",max);
                printf("
    ");
            }
        }
        return 0;
    }
    

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

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

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

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

  • 相关阅读:
    Web大文件上传断点续传解决方案
    STL 源代码剖析 算法 stl_algo.h -- rotate
    BZOJ 1260 CQOI2007 涂色paint 动态规划
    Shiro学习(总结)
    数组与指针
    Doing Homework again(杭电1789)
    leetCode 75.Sort Colors (颜色排序) 解题思路和方法
    hdu 4786 Fibonacci Tree(最小生成树)
    Havel--Hakimi定理推断可图化 python
    最近小感——一个残疾人写的操作系统
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4472495.html
Copyright © 2011-2022 走看看