列表

详情


MGJ13. 派分糖果

描述

N个孩子站成一排,每个孩子有一个分值。给这些孩子派发糖果,需要满足如下需求:

1、每个孩子至少分到一个糖果

2、分值更高的孩子比他相邻位的孩子获得更多的糖果

求至少需要分发多少糖果?

输入描述

0,1,0

输出描述

4

示例1

输入:

5,4,1,1

输出:

7

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2020-07-28

#include <stdio.h>
    
int main()
{
    int score[100];
    int su[100];
    int Num_su;
    char buf[128];
    int i = 0;
    int j,max,IN,more;
    int child;
        
    
    Num_su = 0;
        
    
    while(1)
    {
            
        scanf("%d",&score[i]);
        if(i==0)
        {
            max = 1;
            su[i]=1;
            Num_su+=su[i];
        }
        else
        {
            if(score[i] == score[i-1])
                su[i]=su[i-1];
            else if(score[i] > score[i-1])
                su[i]=su[i-1]+1;
            else
            {
                su[i]=1;
                //Num_su+=1;
                j=i;
                while( (score[j]<=score[j-1]) && (su[j]>=su[j-1]) )
                {
                    su[j-1]+=1;
                    Num_su+=1;
    
                    j--;
                    if(j==0)
                        break;
                }
            }
    
            Num_su+=su[i];
        }
        if(getchar()=='\n'||i>=100)
            break;
        i++;
    }
    printf("%d",Num_su);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 360KB, 提交时间: 2020-05-20

#include <stdio.h>
   
int main()
{
    int score[100];
    int su[100];
    int Num_su;
    char buf[128];
    int i = 0;
    int j,max,IN,more;
    int child;
       
   
    Num_su = 0;
       
   
    while(1)
    {
           
        scanf("%d",&score[i]);
        if(i==0)
        {
            max = 1;
            su[i]=1;
            Num_su+=su[i];
        }
        else
        {
            if(score[i] == score[i-1])
                su[i]=su[i-1];
            else if(score[i] > score[i-1])
                su[i]=su[i-1]+1;
            else
            {
                su[i]=1;
                //Num_su+=1;
                j=i;
                while( (score[j]<=score[j-1]) && (su[j]>=su[j-1]) )
                {
                    su[j-1]+=1;
                    Num_su+=1;
   
                    j--;
                    if(j==0)
                        break;
                }
            }
   
            Num_su+=su[i];
        }
        if(getchar()=='\n'||i>=100)
            break;
        i++;
    }
    printf("%d",Num_su);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 364KB, 提交时间: 2020-05-03

#include <stdio.h>
  
int main()
{
    int score[100];
    int su[100];
    int Num_su;
    char buf[128];
    int i = 0;
    int j,max,IN,more;
    int child;
      
  
    Num_su = 0;
      
  
    while(1)
    {
          
        scanf("%d",&score[i]);
        if(i==0)
        {
            max = 1;
            su[i]=1;
            Num_su+=su[i];
        }
        else
        {
            if(score[i] == score[i-1])
                su[i]=su[i-1];
            else if(score[i] > score[i-1])
                su[i]=su[i-1]+1;
            else
            {
                su[i]=1;
                //Num_su+=1;
                j=i;
                while( (score[j]<=score[j-1]) && (su[j]>=su[j-1]) )
                {
                    su[j-1]+=1;
                    Num_su+=1;
  
                    j--;
                    if(j==0)
                        break;
                }
            }
  
            Num_su+=su[i];
        }
        if(getchar()=='\n'||i>=100)
            break;
        i++;
    }
    printf("%d",Num_su);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 364KB, 提交时间: 2020-04-24

#include <stdio.h>
 
int main()
{
    int score[100];
    int su[100];
    int Num_su;
    char buf[128];
    int i = 0;
    int j,max,IN,more;
    int child;
     
 
    Num_su = 0;
     
 
    while(1)
    {
         
        scanf("%d",&score[i]);
        if(i==0)
        {
            max = 1;
            su[i]=1;
            Num_su+=su[i];
        }
        else
        {
            if(score[i] == score[i-1])
                su[i]=su[i-1];
            else if(score[i] > score[i-1])
                su[i]=su[i-1]+1;
            else
            {
                su[i]=1;
                //Num_su+=1;
                j=i;
                while( (score[j]<=score[j-1]) && (su[j]>=su[j-1]) )
                {
                    su[j-1]+=1;
                    Num_su+=1;
 
                    j--;
                    if(j==0)
                        break;
                }
            }
 
            Num_su+=su[i];
        }
        if(getchar()=='\n'||i>=100)
            break;
        i++;
    }
    printf("%d",Num_su);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2020-05-05

#include <stdio.h>
   
int main()
{
    int score[100];
    int su[100];
    int Num_su;
    char buf[128];
    int i = 0;
    int j,max,IN,more;
    int child;
       
   
    Num_su = 0;
       
   
    while(1)
    {
           
        scanf("%d",&score[i]);
        if(i==0)
        {
            max = 1;
            su[i]=1;
            Num_su+=su[i];
        }
        else
        {
            if(score[i] == score[i-1])
                su[i]=su[i-1];
            else if(score[i] > score[i-1])
                su[i]=su[i-1]+1;
            else
            {
                su[i]=1;
                //Num_su+=1;
                j=i;
                while( (score[j]<=score[j-1]) && (su[j]>=su[j-1]) )
                {
                    su[j-1]+=1;
                    Num_su+=1;
   
                    j--;
                    if(j==0)
                        break;
                }
            }
   
            Num_su+=su[i];
        }
        if(getchar()=='\n'||i>=100)
            break;
        i++;
    }
    printf("%d",Num_su);
    return 0;
}

上一题