几个简单的算法_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 几个简单的算法

几个简单的算法

 2013/7/22 18:42:14  wangfeiaini  程序员俱乐部  我要评论(0)
  • 摘要:1.求最大公约数的欧里几德算法:/***欧力几德*@paramm*@paramn*@return*/privatestaticintoula(intm,intn){if(n==0)returnm;intr=m%n;if(r==0){returnn;}else{m=n;n=r;returnoula(m,n);}}2.求最大公约数的联系整数检查法/***连续整数检查法**@paramm*@paramn*@return*/publicstaticintgcd(intm,intn){intr=Math
  • 标签:算法
class="java">1.求最大公约数的欧里几德算法:
/**
 * 欧力几德
 * @param m
 * @param n
 * @return
 */
 private static int oula(int m,int n){
 if(n==0)return m;
 int r=m%n;
 if(r==0){
 return n;
 }else{
 m = n;
 n = r;
 return oula(m, n);
 }
 }
 2.求最大公约数的联系整数检查法
/**
	 * 连续整数检查法
	 *
	 * @param m
	 * @param n
	 * @return
	 */
	public static int gcd(int m,int n){
		int r = Math.min(m, n);
		for(;r>0;r--){
			if(m%r==0&&n%r==0){
				return r;
			}
		}
		return 0;
	}
 return 0;
 }
 3.z质数判断:
/**
 * 质数判断
 * @param n
 * @return
 */
 public static boolean isPrime(int n){
 boolean flag = true;
 if(n==1) return false;
 if(n==2) return flag;
 for (int i = 2; i<= n/2; i+=2){
     if(n%i == 0){
     flag = false;
         break;
     }
 }
 return flag;
 }
 4.斐波那契额数列三种求解:
public static long m1(int n){
		if(n>1){
			long result = 1;
			do{
				result += m1(n-2);
				n--;
			}while(n>1);
			return result;
		}
		return n;
	}
	
	public static long m2(int n){
		if(n>1){
			long a=0,b=1;
			do{
				long tmp = b;
				b += a;
				a = tmp;
			}while(--n>1);
			return b;
		}
		return n;
	}
	
	public static long m3(int n){
		if(n>1){
			long a,b=1;
			n--;
			a = n&1;
			n /= 2;
			while(n-->0){
				a += b;
				b += a;
			}
			return b;
		}
		return n;
	}
 5.求阶乘的两种算法:
public static Integer F(int n){
 if(n==0)return 1;
 if(n<=2&&;n>=1)return n;
 return F(n-1)*n;
 }
 //计算大数
 public static BigInteger combination(int n){
		if(n==0)return new BigInteger("1");
		if(n<=2&&n>=1)return new BigInteger(n+"");
		int i=3;
		BigInteger b = new BigInteger("0");
		BigInteger tmp = new BigInteger("2");
		while(i<=n){
			b = tmp.multiply(new BigInteger(i+""));
			tmp = b;
			i++;
		}
		return b;
	}
 6.附加一个算法计算题,求大神解答:
 
/**
小a和小b起初分别有A块钱和B块钱,它们决定玩一个游戏,游戏规则是扔一个硬币,如果结果是正面的话,小a要给小b C块钱。
否则是反面的话,小b给小a D块钱。
它们不断地扔硬币,直到某一次应该给钱的人拿不出那么多钱,就认为他破产输掉了。
硬币不是均匀的,它以p1的概率产生正面,1 - p1的概率产生反面。
请问小a最后胜利(也就是说小b破产输掉)的概率有多大?
输入:A,B,C,D是整数,0&lt;=A,B&lt;50,0&lt;=C,D&lt;= 100,p1是浮点数 0&lt;=p1&lt;=1;
输出:为保证输出的是整数,请输出小a获胜的概率乘以100后再下取整(直接截断后面的位数)的结果。
例如,结果是0.125则输出12
*/

?

发表评论
用户名: 匿名