Tag: 数学

如何在整数数组中找到重复的整数序列?

如何在整数数组中找到重复的整数序列? 00将重复,123123也将重复,但01234593623不会。 我知道如何做到这一点,但在我看来它很模糊,而且我的实现并没有因此而走得太远。 我的想法是 每次经过for循环时偏移一定量 在其中循环,并通过该偏移比较数字块 在Java中,我得到了这个: String[] p1 = new String[nDigitGroup]; String[] p2 = new String[nDigitGroup]; for (int pos = 0; pos < number.length – 1; pos++) { System.out.println("HERE: " + pos + (nDigitGroup – 1)); int arrayCounter = -1; for (int n = pos; n < pos + nDigitGroup ; n++) { System.out.printf("\nPOS: […]

if的更短解决方案,否则if,否则if

我正在寻找一种缩短代码的方法,避免重复代码和if语句。 我正在做的是创建一个计算器,在字符串中搜索运算符“* / + – ”并相应地执行它们。 有任何想法吗? if(exp.charAt(i)==’*’) { newResult=Integer.parseInt(exp.substring(0, i)) * Integer.parseInt(exp.substring(i+1, exp.length())); primeResult = newResult; System.out.println(primeResult); } else if(exp.charAt(i)==’/’) { newResult=Integer.parseInt(exp.substring(0, i)) / Integer.parseInt(exp.substring(i+1, exp.length())); primeResult = newResult; System.out.println(primeResult); } else if(exp.charAt(i)==’+’) { newResult=Integer.parseInt(exp.substring(0, i)) + Integer.parseInt(exp.substring(i+1, exp.length())); primeResult = newResult; System.out.println(primeResult); } else if(exp.charAt(i)==’-‘) { newResult=Integer.parseInt(exp.substring(0, i)) – Integer.parseInt(exp.substring(i+1, exp.length())); primeResult = […]

Java旋转像素arrays

我试图在java中制作一个算法来旋转一个二维像素arrays(不限于90度),我唯一的问题是:最终结果让我在图像中留下了点/孔。 这是代码: for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { int xp = (int) (nx + Math.cos(rotation) * (x – width / 2) + Math .cos(rotation + Math.PI / 2) * (y – height / 2)); int yp = (int) (ny + Math.sin(rotation) […]

在Java中将单词转换为数字

我已经看到很多算法,你给它们一个数字说“123”,它将它转换为123。 但我似乎无法找到相反的东西,而我确实找到的只能达到数字1000,任何人都可以用正确的方式指导我,因为我可以做的就是创建一个方法“一千二百三十四“并且还给”1234“

如何在Java中创建随机BigDecimal?

这个问题: 如何生成随机BigInteger描述了一种实现与BigIntegers的Random.nextInt(int n)相同语义的方法。 我想对BigDecimal和Random.nextDouble()做同样的事情。 上述问题的一个答案建议创建一个随机的BigInteger,然后用随机比例从中创建一个BigDouble。 一个非常快速的实验表明这是一个非常糟糕的主意:) 我的直觉是使用这种方法需要通过像n-log10(R)类的东西来缩放整数,其中n是输出中所需精度的位数,R是随机BigInteger。 这应该允许存在正确的位数,以便(例如)1 – > 10 ^ -64和10 ^ 64 – > 1。 还需要正确选择缩放值,使结果落在[0,1]范围内。 有没有人以前做过这个,他们知道结果是否正确分布? 有没有更好的方法来实现这一目标? 编辑:感谢@biziclop纠正我对scale参数的理解。 以上不是必需的,恒定的比例因子具有期望的效果。 为了以后的参考,我(显然是工作代码)是: private static BigDecimal newRandomBigDecimal(Random r, int precision) { BigInteger n = BigInteger.TEN.pow(precision); return new BigDecimal(newRandomBigInteger(n, r), precision); } private static BigInteger newRandomBigInteger(BigInteger n, Random rnd) { BigInteger r; do { r […]

计算太阳的路径

我正在编写几种必要的方法来计算特定点的太阳路径。 我已经使用两个不同的来源编写代码用于计算,并且都没有产生所需的结果。 来源是: http : //www.pveducation.org/pvcdrom/properties-of-sunlight/suns-position和http://www.esrl.noaa.gov/gmd/grad/solcalc/solareqns.PDF 注意:弧度为Deg * 60分钟。 localSolartime:我已经将经度转换为’分钟’,从localStandardTimeMeridian方法派生的本地标准时间子午线(lstm)返回’分钟’中的值,以及也以’分钟’返回的equationOfTime。 使用pveducation中的等式,我计算了时间校正,它解释了给定时区内的小时间变化。 当我将这个结果和localTime(每分钟几分钟)应用到当地的太阳时(lst)方程时,结果是676.515(此刻),这对我没有任何意义。 据我所知,当地的太阳时代表示相对于太阳的时间,当它处于天空的最高点时,在当地,被认为是太阳正午。 676.515没有意义。 有没有人理解可能导致这种情况的原因。 HourAngle:我希望一旦我修复了localSolarTime方法,就不需要纠正了。 我选择了华盛顿特区的纬度和经度。 Zenith和Azimuth读数都应该是正值,而对于我这个时刻,它们分别是66和201。 public class PathOfSun { static LocalTime localTime = LocalTime.now(); static double dcLat = 38.83; static double dcLong = -77.02; static DecimalFormat df = new DecimalFormat(“#.0”); public static void main(String [] args) { int day = dayOfYear(); double […]

快速方形双倍

我正在寻找最快的双倍方式( double d )。 到目前为止,我提出了两种方法: 1. d*d 2. Math.pow(d, 2) 为了测试性能,我设置了三个测试用例,每个测试用例使用相同的种子为三种情况生成随机数,然后计算循环中的平方数1000000次。 在第一个测试用例中,使用random.nextDouble()生成数字,在第二种情况下使用random.nextDouble()*Double.MAX_VALUE ,在第三种情况下使用random.nextDouble()*Double.MAX_VALUE random.nextDouble()*Double.MIN_VALUE 。 几次运行的结果(近似结果,总是有一些变化,使用java 1.8运行,在Mac OSX Mavericks上为java 1.6编译) Approach | Case 1 | Case 2 | Case 3 ———•——–•——–•——- 1 | ~2.16s | ~2.16s | ~2.16s 2 | ~9s | ~30s | ~60s 结论似乎是方法1更快,但Math.pow似乎表现得有些奇怪。 所以我有两个问题: 1为什么Math.pow如此缓慢,为什么它会严重处理> 1 ,更糟糕的是< -1数? 2有没有办法提高性能超过我建议的方法1? 我在想的是: long l […]

Java中的Prime分解程序

我正在研究用Java实现的素数分解程序。 目标是找到最大的素数因子600851475143( 项目欧拉问题3 )。 我想我已经完成了大部分工作,但是我遇到了一些错误。 此外,我的逻辑似乎已关闭,特别是我设置的用于检查数字是否为素数的方法。 public class PrimeFactor { public static void main(String[] args) { int count = 0; for (int i = 0; i < Math.sqrt(600851475143L); i++) { if (Prime(i) && i % Math.sqrt(600851475143L) == 0) { count = i; System.out.println(count); } } } public static boolean Prime(int n) { boolean isPrime = […]

两个整数(或多头)没有溢出的平均值,截断为0

我想用Java计算任意两个整数x,y的计算方法(x + y)/2 。 如果x + y> Integer.MAX_VALUE或<Integer.MIN_VALUE,则天真的方式会遇到问题。 Guava IntMath 使用这种技术: public static int mean(int x, int y) { // Efficient method for computing the arithmetic mean. // The alternative (x + y) / 2 fails for large values. // The alternative (x + y) >>> 1 fails for negative values. return (x & y) […]

在给定范围之间生成奇数随机数

如何在给定范围之间生成奇数随机数 对于Eg:范围在1到6之间。随机数为3或1或5 生成随机数的方法: Random_No = Min + (int)(Math.Random()*((Max-Min)+1)) 请参考如何在Java中生成特定范围内的随机整数? 生成奇数随机数的方法: Random_No = Min + (int)(Math.Random()*((Max-Min)+1)) if(Random_No%2 ==0) { if((Max%2)==0)&&Random_No==Max) { Random_No = Random_No – 1; } else{ Random_No = Random_No +1; } } 这个函数总是将2转换为3而不是1我们可以将它变成一个更随机的函数,它可以将2转换为3,有时转换为1?