0分求助,感觉题目没看懂,求简单例子
查看原帖
0分求助,感觉题目没看懂,求简单例子
915148
XieLee楼主2023/2/3 12:48
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.security.KeyStore.Entry;
import java.util.HashMap;
import java.util.Map;
/**
 * 
 * @author GodXie
 *
 */
public class Main {
	static  BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
	static StreamTokenizer st=new StreamTokenizer(reader);
	static PrintWriter pw =new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
    public static void main(String[] args) throws IOException {
        int n = nextInt();
        Map<Integer,Integer>map=new HashMap<>();
        for(int i=0;i<n;i++)
        {
        	int tmp=nextInt();
        	if(map.containsKey(tmp))
        	{
        		map.put(tmp, map.get(tmp)+1);
        	}
        	else
        	{
        		map.put(tmp, 1);
        	}
        }
        int count1=0,count=0;
        int result=0;
        for(Map.Entry<Integer, Integer>entry:map.entrySet()) {
        	int key=entry.getKey();
        	if(entry.getValue()>=2)
        	{
        		result=C(entry.getValue());
        		if(key%2==0&&map.containsKey(key/2)&&map.get(key/2)>1)
        		{
        			count1=C(map.get(key/2));
        		}
        		for(Map.Entry<Integer, Integer>entry1:map.entrySet())
        		{
        			int key1=entry1.getKey();
        			if(key1==key||key1*2==key)
        			{
        				continue;
        			}
        			if(map.containsKey(key-key1))
        			{
        				count+=map.get(key-key1)*map.get(key1);
        			}
        		}
        	}
        }
       System.out.println((count1+count/2)*result);
    }
    private static int C(int value) {
    	int result=1;
    	int min=1;
    	for(int i=value;i>2;i--)
    	{
    		result*=i;
    	}
    	for(int i=value-2;i>1;i--)
    	{
    		min*=i;
    	}
		return result/min;
	}
	static int nextInt() {
    	try {
			st.nextToken();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
    	return (int)st.nval;
    }
}

如果输入为 6 1 1 1 2 2 2答案是不是应该为3*3=9种?

2023/2/3 12:48
加载中...