一、题目描述
随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
二、格式
- 输入格式:
输入共两行,第一行包含一个整数 n,表示测试题中给出的正整数个数。
第二行有 n 个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。
- 输出格式
输出共一行,包含一个整数,表示测验题答案。
三、思路
- 定义一个很大很大的int型数组 big[],定义计数器count
- 将输入的数存储到数组num[n]中
- 遍历数组num,并将num[i]的值作为数组big[]的下标,让big[num[i]]=1
- 将数组num[n]中的数两两相加,取相加的和sum作为数组big[]的下标,让big[sum]=0
- 遍历数组num,判断big[num[i]]的值,等于0,则count+1
- 此解的妙处在于借助一个很大的工具数组,将判断两个数的和是否等于集合中的另一个数转变成,对工具数组的下标判断:目标数组中的一个数 c 作为工具数组下标m,目标数组中另两个数a , b的和作为工具数组下标 n,如果工具数组中下标 m 对应的值和下标 n 对应的值相等,则证明 a+b = c
四、代码
import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub int count =0; //定义计数器 int big[] = new int[1000001]; //定义工具数组 //获取输入的数字,存入数组num[] Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int num[] = new int[n]; for(int i =0;i