分糖果 问题
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;
}
输入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;
}
相关文章推荐
- 九度OJ 1061 成绩排序
- jq学习使用基础笔记
- 机器学习基础 维基翻译 超参数选择 K近邻法 及简单的sklearn例子
- URAL 1114 Boxes(简单dp)
- 敏捷软件开发
- C++中const的作用(至少要说出3个)
- 随笔_20160716
- 最大的矩形
- App 即时通讯 SDK
- 微服务架构的分布式事务场景及解决方案分析
- 一次3D打印笔的糟心经历
- Centos 6.5 安装 Nginx+MySQL+PHP
- JAVA NIO
- HDU1164
- 23. Merge k Sorted Lists
- 【Linux系列】Ubuntu网络基本配置
- HQL查询&连接池&二级缓存
- js中document.getElementById("id").value+1问题
- Python笔记(4)类__属性与描述符
- const的使用