1070 结绳(JAVA)

深碍√TFBOYSˉ_ 2023-09-28 19:15 183阅读 0赞

给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连。每次串连后,原来两段绳子的长度就会减半。

299cc24238f730b6737f179f4da55652.jpeg

给定 N 段绳子的长度,你需要找出它们能串成的绳子的最大长度。

输入格式:

每个输入包含 1 个测试用例。每个测试用例第 1 行给出正整数 N (2≤N≤104);第 2 行给出 N 个正整数,即原始绳段的长度,数字间以空格分隔。所有整数都不超过104。

输出格式:

在一行中输出能够串成的绳子的最大长度。结果向下取整,即取为不超过最大长度的最近整数。

输入样例:

  1. 8
  2. 10 15 12 3 4 13 1 15

输出样例:

  1. 14

代码实现:

  1. import java.io.*;
  2. import java.util.Arrays;
  3. /**
  4. * @author yx
  5. * @date 2022-07-24 23:37
  6. */
  7. public class Main {
  8. static PrintWriter out=new PrintWriter(System.out);
  9. static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
  10. static StreamTokenizer in=new StreamTokenizer(ins);
  11. public static void main(String[] args) throws IOException {
  12. in.nextToken();
  13. int N=(int) in.nval;
  14. double[] nums=new double[N];
  15. for (int i = 0; i < N; i++) {
  16. in.nextToken();
  17. nums[i]= in.nval;
  18. }
  19. Arrays.sort(nums);
  20. //排好序后取的第一个数
  21. double sum=nums[0];
  22. for (int i = 1; i <N ; i++) {
  23. sum=sum/2+nums[i]/2;
  24. }
  25. int ans=(int) sum;
  26. System.out.println(ans);
  27. }
  28. }

发表评论

表情:
评论列表 (有 0 条评论,183人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PAT~乙级~1070 ~Python

    目描述: 给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一...

    相关 算法:【烧计时】

    题干:烧一根不均匀的绳要用一个小时,从头烧到尾总共需要1个小时.现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢? 题解: 1. 同时点燃“第

    相关 1070 JAVA

    给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连。每次串

    相关 1070. (25)

    给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连。每次串