Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 竞赛程序设计算法思维的改进_Java_Algorithm_Optimization - Fatal编程技术网

Java 竞赛程序设计算法思维的改进

Java 竞赛程序设计算法思维的改进,java,algorithm,optimization,Java,Algorithm,Optimization,我是这个社区的新手,已经获得了很多-1票,所以我正在努力改进我提问的方式 最近我在CodeChef尝试了这个问题。这就是问题的定义 这可能是这个问题集中最简单的任务。为了帮助您理解这项任务,让我们定义两个关键函数:f(n,k),(k,当您尝试在一张纸上解一个简单的解时,您将发现给定解的魔力 尝试使用6作为输入。您希望找到G(f(12,1),f(12,3),f(12,5),…,f(12,11))。计算fs,您将得到:12,220,792,…然后将它们转换为二进制 结果应该除以所有这些值,因此它不能

我是这个社区的新手,已经获得了很多-1票,所以我正在努力改进我提问的方式

最近我在CodeChef尝试了这个问题。这就是问题的定义


这可能是这个问题集中最简单的任务。为了帮助您理解这项任务,让我们定义两个关键函数:f(n,k),(k,当您尝试在一张纸上解一个简单的解时,您将发现给定解的魔力

尝试使用6作为输入。您希望找到G(f(12,1),f(12,3),f(12,5),…,f(12,11))。计算fs,您将得到:12,220,792,…然后将它们转换为二进制

结果应该除以所有这些值,因此它不能大于最小值(在本例中为12)。因此,在二进制表示中,只看最右边的四位(因为12只有4位)。例如,所有大于12的值在二进制表示中都有“1000”作为其最右边的四位

所以基本上你需要找到12和8的GCD(“1000”二进制)!ta da!现在你有了一个更简单的问题,这个问题的标题引用了这个问题(最简单的问题)。剩下的问题可以用多种方法来完成,正如Code Chef上的解决方案所示


关于你关于如何提高算法技能的问题,除了像这样的书之外,你还需要解决很多像这样的问题。一个很好的起点是。另一本你可以掌握很多算法知识的书是史蒂文·斯基纳的《算法设计手册》。

。我建议你适当地修改你的问题。你可以也可以尝试提高你的代码格式化技能。目前的水平伤害了我的眼睛。
   import java.util.*;
    class Main 
 {
     public static void main(String[] args) {

//public static void main(String[] args) {
    Scanner scan=new Scanner(System.in);
    long T=scan.nextLong();
    long fin;
    while(T>0){
        T--;
        long N=scan.nextLong();
        fin=-(-N^N);
        System.out.println(fin);
}
}
 }
           import java.io.BufferedReader;
         import java.io.IOException;
         import java.io.InputStreamReader;
          import java.util.ArrayList;


       class Code1 
       {
static ArrayList<Long> combValues=new ArrayList<Long>();
static ArrayList<Long> input=new ArrayList<Long>();
static ArrayList<Long> output=new ArrayList<Long>();
public static void main(String args[])throws IOException
{
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    //System.out.println("Enter the values of 'T' ");
    //System.out.println("Input:");
    int T=Integer.parseInt(br.readLine());
    //System.out.println("Enter the value of 'N' ");
    for(int i=1;i<=T;i++)
    {
        input.add(Long.parseLong(br.readLine()));
    }
    for(int i=0;i<T;i++)
    {
        output.add(computeFX(input.get(i)));
    }
    //System.out.println("Output:");
    for(long i:output)
    {
        System.out.println(i);
    }
}
public static long computeFX(long N)
{
    combValues=new ArrayList<Long>();
    for(int i=1;i<=2*N-1;i+=2)
    {
        combValues.add( factorial(2*N)/(factorial(2*N-i)*factorial(i)));
    }
    return computeGX();
}
public static long computeGX()
{
    boolean flag=false;
    long tempY=0;
    long limit=combValues.get(0);
    outer:for(int i=new Long(limit).intValue();i>=1;i--)
    {
        inner:for(int j=0;j<(combValues.size()/2)+1;j++)
        {
            if(combValues.get(j)%i!=0)
            {   
                flag=false;
                break inner;
            }
            else
            {
                flag=true;
            }
        }
        if(flag)
        {
            tempY=i;
            break outer;
        }
    }
    return tempY;
}
public static long factorial(long n)
{
    long fact=1L;
    for(int i=1;i<=n;i++)
    {
        fact*=i;
    }
    return fact;
}

   }