首页 > 试题广场 > 射击训练
[编程题]射击训练

小Q是一个专业的射击运动员,有一天他像往常一样进行n次射击训练,每次射击他都会取最高的四次得分作为最终得分来衡量他的射击状态,但是今天他制定了一个奇怪的规则:在n次射击得分中取出四次得分a,b,c,d,并且满足a*b*c=d作为最终得分来衡量他的射击状态。

但是小Q发现满足这个条件的(a,b,c,d)可能不止一个,小Q需要你来帮助他计算一共有多少个这种(a,b,c,d)


输入描述:
输入包括两行,第一行包括一个正整数n(4≤n≤500),表示射击的次数。

第二行n个正整数w[i](1≤w[j]≤10^6),表示每次射击的得分。


输出描述:
输出可以作为最终得分的种数。
示例1

输入

6
10 2 2 7 40 160

输出

2

说明

有两种满足条件的(a,b,c,d)分别是(10,2,2,40)和(2,2,40,160)。
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,w[501],res=0,vim[1000005];
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>w[i];
        vim[w[i]]=1;
    }
    sort(w,w+n);
    for(int i=0;i<n;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            for(int k=j+1;k<n;k++)
            {
                int m=w[i]*w[j]*w[k];
                if(m>w[n-1])
                    break;
                else if(vim[m]==1)
                    res++;
            }
        }
    }
    cout<<res<<endl;
    return 0;
}

发表于 2019-06-26 20:43:37 回复(0)
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        while(scan.hasNext()){
            int n=Integer.valueOf(scan.nextLine());
            int[]data=new int[n];
            String s=scan.nextLine();
            String[]strs=s.split(" ");
            for(int i=0;i<n;i++){
                data[i]=Integer.valueOf(strs[i]);
            }
            System.out.println(get(n,data));
        }
    }
    public static int get(int n,int[]data){
        int count=0;
        long tem=0;
        Arrays.sort(data);
        int[]help=new int[1000005];
        for(int i=0;i<n;i++){
            help[data[i]]=1;
        }
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
                for(int k=j+1;k<n;k++){
                    tem=data[i]*data[j]*data[k];
                    if(tem>1000005){
                        break;
                    }
                    else {
                        int temh=(int)tem;
                        if(help[temh]==1){
                            count++;
                        }
                    }
                }
            }
        }
        return count;
    }
}

发表于 2019-06-13 16:38:56 回复(0)