CSP认证刷题【201909】

CSP认证刷题

201909-1【小明种苹果】

CSP认证刷题【201909】_第1张图片
CSP认证刷题【201909】_第2张图片

解题思路

一开始是想着用一个数组存储数据,当数据输入完成后才进行计算,后面想了一下发现不用这样做,可以边输入边完成计算。在两个for循环完成所有计算操作。

实现代码
import java.util.Scanner;

public class Main {
     

	public static void main(String[] args) {
     

		int N, M;
		int T, k, P;

		Scanner sc = new Scanner(System.in);
		// 输入N苹果树棵树
		N = sc.nextInt();
		// 输入M蔬果轮数
		M = sc.nextInt();

		T = k = P = 0;
		//保存最大的蔬果数
		int maxP = 0;
		for (int i = 0; i < N; i++) {
     
			// 输入果树的蔬果个数
			int a = sc.nextInt();
			// 计入总蔬果个数
			T += a;
			// 计算每颗果树的疏果数
			P = 0;
			for (int j = 0; j < M; j++) {
     
				P += sc.nextInt();
			}
			// 总蔬果数减去疏果数
			T += P;
			//当前果树的疏果数较大,更新最大疏果数和保存编号
			if (maxP > P) {
     
				k = i + 1;
				maxP = P;
			}
		}
		sc.close();
		System.out.println(T + " " + k + " " + -maxP);
	}
}

201909-2【小明种苹果续】

CSP认证刷题【201909】_第3张图片CSP认证刷题【201909】_第4张图片CSP认证刷题【201909】_第5张图片

解题思路

在第一题的基础上进行扩展:输入时保存当前果树的疏果数,当输入为正整数时需进行判断是否掉落苹果,如果有,对次数进行计算,并将掉落苹果的果树编号用一个数组保存。完成某一行的输入也就是某棵果树的操作后需要对总疏果数进行计算。最后通过得到的数组进行运算得出苹果掉落情况E。

实现代码
import java.util.Scanner;

public class Main {
     

	public static void main(String[] args) {
     
		int N;// 苹果树棵树
		int T, D, E;
		Scanner sc = new Scanner(System.in);
		// 输入苹果树棵树
		N = sc.nextInt();
		// 实例化一个数组用于存储有苹果掉落的苹果树
		int[] a = new int[N];

		T = D = E = 0;
		for (int i = 0; i < N; i++) {
     
			// 默认当前苹果树没有苹果掉落
			a[i] = 0;
			// 输入当前苹果树的操作次数
			int count = sc.nextInt();
			// 输入当前苹果的苹果数
			int currT = sc.nextInt();
			for (int j = 0; j < count - 1; j++) {
     
				int d = sc.nextInt();// 当前苹果树的疏果数
				if (d > 0) {
     // 小明重新统计苹果个数,需要和当前苹果个数相比,判断是否有苹果掉落
					if (d < currT && a[i] == 0) {
     // 有苹果掉落且是第一次发现
						a[i] = 1;
						D++;
					}
					currT = d;
				} else {
     
					currT += d;
				}
			}
			T += currT;
		}
		// 计算E
		for (int i = 0; i < N; i++) {
     
			if (a[i] == 1 && a[(i + 1) % N] == 1 && a[(i + 2) % N] == 1)
				E++;
		}
		sc.close();
		System.out.println(T + " " + D + " " + E);
	}
}

你可能感兴趣的:(CSP,CSP)