题目

在这里插入图片描述
201909-02小明种苹果续 - 图2
201909-02小明种苹果续 - 图3

思路

也是一个序列处理的题目,思路不难。
一开始卡50分是因为 落果数目重复计算
我本来还以为是因为我循环计数写错了,但结果不是。可见虽然先判断0-n-3,再单独判断 n-2,n-1的方法很傻 但也是对的。
当然了,还是要学会 用上% 求余的方法。

代码

  1. #include<iostream>
  2. using namespace std;
  3. const int N =1005;
  4. int drop[N] ={0};
  5. long long apple_num[N] ={0};
  6. int drop_num =0;
  7. int E =0;//连续掉落组数
  8. int main(){
  9. int n;
  10. cin>>n;
  11. for(int i=0;i<n;i++){
  12. int m;//每行输入个数
  13. int init_num;
  14. cin>>m;
  15. cin>>init_num;
  16. apple_num[i] =init_num;
  17. int temp_m =m-1;
  18. while(temp_m--){
  19. int temp_num;//每行从第三个开始的输入
  20. cin>>temp_num;
  21. if(temp_num>0){
  22. if(apple_num[i]>temp_num){
  23. //原来个数大于重新统计个数,说明掉落
  24. drop[i] =1;
  25. //drop_num++; //50分的错误在这里,存在重复计算落果现象!!!
  26. }
  27. apple_num[i] =temp_num;
  28. }else{
  29. //小于0 说明在蔬果
  30. apple_num[i]+=temp_num;
  31. }
  32. }
  33. }
  34. long long sum =0;
  35. for(int i=0;i<n;i++){
  36. sum+=apple_num[i];
  37. }
  38. for(int i=0;i<n;i++){
  39. if(drop[i] ==1){
  40. drop_num++;
  41. if(drop[(i+1)%n]==1&&drop[(i+2)%n]==1){
  42. E++;
  43. }
  44. }
  45. }
  46. cout<<sum<<" "<<drop_num<<" "<<E;
  47. return 0;
  48. }