当前位置:   article > 正文

AtCode初学者竞赛 332

atcode

A—online shopping

 

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. int main()
  5. {
  6. int n, average, fee;//定义n次的循环,是否有运费的标准,运费。
  7. scanf("%d %d %d", &n, &average, &fee);
  8. int i; int sum=0;
  9. for (i = 0; i < n; i++)//把买的东西的价格和件数相乘然后相加,得到总值
  10. {
  11. int price, t;
  12. scanf("%d %d", &price, &t);
  13. sum += price * t;
  14. }
  15. if (sum >= average)//将总值与标准比较,大于就不需要运费,小于就需要运费。
  16. printf("%d", sum);
  17. else {
  18. sum += fee;
  19. printf("%d", sum);
  20. }
  21. return 0;
  22. }

 B--Glass and Mud

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. int main()
  5. {
  6. int n, boli, bei;
  7. scanf("%d %d %d", &n, &boli, &bei);//定义步骤数,玻璃杯,杯子的毫升数。
  8. int i = 0; int sum = 0; int a=0, b=0;
  9. for (; i < n; i++)//我们可以归结所有的情况为:玻璃杯满——倒,杯子没水——加,杯子有水——倒入玻璃杯。
  10. {
  11. if (a == boli)
  12. a = 0;
  13. else if (b == 0)
  14. b = bei;
  15. else if (b >= boli - a)
  16. {
  17. b -= boli - a;
  18. a = boli;
  19. }
  20. else
  21. {
  22. a += b;
  23. b = 0;
  24. }
  25. }
  26. printf("%d %d", a, b);
  27. return 0;
  28. }

C——T-shirts

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. int main()
  5. {
  6. int N, M;
  7. scanf("%d %d", &N, &M);//输入天数和已经准备的shirts
  8. int i = 0; char plan[1000];
  9. scanf("%s", plan);//输入安排
  10. int needt = 0;//定义消耗的plain-shirts
  11. int needl=0;//定义消耗的Logo-shirts
  12. int mail = 0;//定义需要买的Logo-shirts
  13. //根据我的切身体验,分类讨论时如果从’0‘开始其实容易大脑短路,所以建议从’1‘或’2‘开始讨论
  14. for (; i < N; i++)//这个题目我们其实可以分为三种情况讨论
  15. {
  16. //1‘是吃饭,可以穿plain也可以是Logo,但题目中是要求最少的Logo衣服,所以优先消耗plain,如果求最大自然就优先消耗Logo
  17. if (plan[i] == '1')
  18. {
  19. if (M > needt)//当消耗的plain-shirts小于准备的时,就会消耗plain。所以needt加一
  20. needt++;
  21. else//当消耗等于或大于(其实在这里没有这种可能)准备时就会消耗Logo
  22. needl++;
  23. }
  24. else if (plan[i] == '2')
  25. needl++;
  26. else
  27. {
  28. if (needl > mail)//可能很多人就是在这里就不能理解,为啥要比较消耗的和买的然后再把消耗的赋值给买的而不是直接赋值呢?因为如果直接赋值如果说只有一个零那就是对的,但如果有两个及以上就不对。举个例子,如果第一个零之前,消耗3Logo,mail=3,needl变为0;第一个零到第二个零之间没消耗或者消耗小于3,那么如果是直接赋值,mail就变成了0或者12;最后结果就不会是3!!!
  29. {
  30. mail = needl;
  31. }
  32. needl = 0; needt = 0;
  33. }
  34. }
  35. if (needl > mail)
  36. //最后为啥还要来个比较,其实’0‘每出现一次就相当于一次”总结“,如果在一个’0‘之后或者甚至没有一次’0‘,就可能会出现后面消耗的Logo,大于上一次“总结”时的,所以这里需要一个比较。
  37. mail = needl;
  38. printf("%d", mail);//可能有别人的答案或者解析中把数组中第N+1位定义为’0‘(如 char S[N]='0')或者类似行为其实就相当于我在最后这里的比较!!!!
  39. return 0;
  40. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/74458
推荐阅读
相关标签
  

闽ICP备14008679号