zoukankan      html  css  js  c++  java
  • ACM题解报告——HD1008

      水题一道,废话不多说,直接贴代码

    #include<stdio.h>
    #include<string.h>
    int main()
    {
      int a[ 105],n;
      int sum,i,j;
      while( scanf( "%d",&n)&&n!=0)
    {
      sum=0;
      memset( a,-1,sizeof( a));
      for( i=0;i<n;i++)
        scanf( "%d",&a[ i]);
      sum+=a[ 0]*6+5;
      for( i=0;i<n&&a[ i+1]!=-1;i++)
        {   j=a[ i+1]-a[ i];
      if(j>0 )
        sum+=j*6+5;
      else 
        sum+=( -j)*4+5;
     
     }
      printf( "%d\n",sum);
     }
      return 0;
    }

    第一次提交错误了,因为我把a数组初始化为0,在第二个for语句做判断的时候,判定条件为i<n&&a[n+1]!=0,导致电梯最后停在0层时候的sum值不对,后来改用了-1。

    咦,怎么感觉我的代码字体大小不一样呢,好奇怪啊~

    后来想了想,其实也可以不用数组实现的,加入一点动态规划的思想在里边,考虑到电梯停的两个不同楼层间关系,可以用一个整型begin记录每次的上一楼层,每停一次都要更新。

    代码如下:

     1 #include<stdio.h>
     2 #include<string.h>
     3 
     4 int main( )
     5 {
     6   int sum,i,n,b,begin;
     7   while( scanf( "%d",&n)&&n!=0)
     8 {
     9   begin=0;
    10   sum=0;
    11   for( i=0;i<n;i++)
    12 {
    13   scanf( "%d",&b);  
    14   if( b>=begin)  
    15   sum+=( b-begin)*6+5;
    16   else
    17     sum+=( begin-b)*4+5;
    18   begin=b;
    19  }
    20   printf( "%d\n",sum);
    21  }
    22   return 0;
    23 }

    第二种实现方式代码会更简洁一些,个人比较倾向于第二种,一次AC。

  • 相关阅读:
    洛谷 P1141 01迷宫
    洛谷 p1443
    setw
    Fliptile
    追牛
    Dungeon Master
    vim的一些基本操作
    洛谷 p1309 瑞士轮
    洛谷 p1090 合并果子
    selenium2 WebDriver 在asp.net项目中的应用
  • 原文地址:https://www.cnblogs.com/paradises/p/3052606.html
Copyright © 2011-2022 走看看