1.题目
你有n个数,可以将它们两两匹配(即将两数首尾相连),每个数只能使用一次,问匹配后最多有多少个3的倍数(没有进行匹配的数不算)?
格式
输入格式:
第一行一个n,接下来n个正整数。
输出格式:
输出最多有多少个3的倍数.
样例 1
输入:
3 123 123 99输出:
1备注
其中:1≤n≤10000,1≤x≤100000000
本题相关知识点: 算法基础:枚举
题目来源:码蹄集
2.代码
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
//余数有3种情况,分别为0,1,2
int[] arr = new int[3];
//对输入进行处理,获得除3的余数
for(int i = 0; i < n; ++i) {
String s = input.next();
int sum = 0;
for (int k = 0; k < s.length(); ++k) {
sum += s.charAt(k) - '0';
}
++arr[sum % 3];
}
//只要两种组合情况符合题意
int num = arr[0] / 2 + Math.min(arr[1], arr[2]);
System.out.println(num);
input.close();
}
}
3.思路及总结
两个数的和为3的倍数,则不用考虑两个数的先后顺序,只要两数各个位上的和为3的倍数即可。数字对3取余后有三种情况,分别为0,1,2。显然,当两个数字的余数都为0,或者余数为1的数和余数为2的数组合时,才符合要求。