您的位置:首页 > 其它

分糖果 问题

2016-07-16 22:06 148 查看
问题:

输入N个人的的身高序列,高的人要比相邻矮的人分的糖果多,保证每个人至少有一颗糖果,请问最少需要多少颗糖果?

分析:

每个人都先有一颗糖果,先从前面遍历,发现后面的高度比前面的大,后面的应比前面多1,(需要注意是后面的人加,如果改成后面高度比前面小,前面加的情况,就不能统计累加的情况)然后从后面先前遍历,如果前面的比后面大,前面的在后面基础上加1。注意不是自己在原来的基础加1。

算法:

用结构体,存身高,和自己分的糖果数量。最后统计所有人的总和。

代码:

#include<iostream>
using namespace std;

struct Data{
int High;
int Num=1;
};

int main()
{
int N,i,j,count=0;
cin>>N;
Data Temp
;
for(i=0;i<N;i++)
cin>>Temp[i].High;
for(i=0;i<N-1;i++)
if(Temp[i+1].High>Temp[i].High)
Temp[i+1].Num=Temp[i].Num+1;
for(i=N-1;i>0;i--)
if(Temp[i-1].High>Temp[i].High)
Temp[i-1].Num=Temp[i].Num+1;
for(i=0;i<N;i++)
count=count+Temp[i].Num;
cout<<count<<endl;
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: