📜  门| GATE-CS-2005 |第 77 题(1)

📅  最后修改于: 2023-12-03 15:12:41.110000             🧑  作者: Mango

题目说明

本题来自门(GATE)计算机科学专业的2005年考试,题号为CS-2005第77题。此题为编程题,要求考生编写一个程序。

题目要求

编写一个程序,该程序从指定的文件中读取一组整数,并根据以下规则生成一组新的整数:

  • 将原始整数数组分成长度相等的m个部分。m为一个指定的参数。
  • 对于每个部分,找到其中的最大值和最小值,并记录它们的差值。
  • 将这些差值存储在新的整数数组中,并将其返回。

函数原型如下:

int[] getDifferences(String fileName, int m);

其中,参数fileName为输入文件名,参数m为要分成的组数。

输入文件中的第一行将是一个整数,此整数表示输入的整数数组中有多少个整数。接下来的每行将包含整数数组的一个元素。

程序实现
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Main {
    
    public static int[] getDifferences(String fileName, int m) throws IOException {
        int[] nums = Files.lines(Paths.get(fileName)).mapToInt(Integer::parseInt).toArray();
        int size = nums.length / m;
        int[] result = new int[m];
        
        for (int i = 0; i < m; i++) {
            int start = size * i;
            int end = i == m - 1 ? nums.length : start + size;
            int max = Integer.MIN_VALUE;
            int min = Integer.MAX_VALUE;
            
            for (int j = start; j < end; j++) {
                if (nums[j] > max) max = nums[j];
                if (nums[j] < min) min = nums[j];
            }
            
            result[i] = max - min;
        }
        
        return result;
    }

    public static void main(String[] args) {
        try {
            int[] result = getDifferences("input.txt", 3);
            for (int r : result) {
                System.out.print(r + " ");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
程序说明

此程序使用Java语言编写,利用Java 8的新特性和NIO包中的Files读取文件中的整数,然后按照题目要求的规则处理整数,并返回新的整数数组。

程序中getDifferences方法接收一个文件名fileName和一个整数m,其中fileName为输入文件名,m为要分成的组数。在方法中,读取文件中的整数,并通过size变量计算每个部分的大小。然后使用一个for循环,分别对每个部分进行处理,并将结果存储在result数组中,最后返回result数组。

在main方法中,调用getDifferences方法,并将结果输出到控制台。

总结

此程序通过使用Java语言和NIO包中的Files读取文件中的整数,实现了按照题目要求的规则处理整数,并返回新的整数数组的功能。此题考查了程序员对于文件读取,数组处理和循环语句等基础知识的掌握程度。