Java 竞赛程序设计算法思维的改进
我是这个社区的新手,已经获得了很多-1票,所以我正在努力改进我提问的方式 最近我在CodeChef尝试了这个问题。这就是问题的定义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,…然后将它们转换为二进制 结果应该除以所有这些值,因此它不能
这可能是这个问题集中最简单的任务。为了帮助您理解这项任务,让我们定义两个关键函数: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;
}
}