Day6-------准备蓝桥杯的第六天

不定方程解法

1、对于ax +by = c

(1)当数目很小时,可通过暴力破解的方法解决

//4x -5y = 7
for(int x = 0;x<100;x++){
   for(int y = 0;y<100;y++){
       if(4*x-5*y==7){
          System.out.println(x+" "+y);
       }
    }
}

(2)ax = c - by;c-by 一定可以被a整除

① 求出特解,从双重循环到单层循环

②求出通解

for(int y = 0;y<100;y++){
   if((7+5*y)%4)
     System.out.println("y="+y);
     System.out.println("x="+((7+5*y)/4);
}


2、水仙花数

例如,N=4,1634 = 1^4 +6^4+3^4+4^4;

N=5,92727 = 9^5+2^5+7^5+2^5+7^5;

.......

问N=21,求所有满足条件的花朵数。

解:a^21+b^21+c^21+d^21……=abcd……

思想:这道题N值过大,不能用暴力搜索,它的和只与某个数字出现的次数有关。

import java.math.BigInteger;
public class A {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int i = 0;i<base.length;i++) {
			base[i] = calcu_21(i);
		}
		int [] a = new int [10]; //每个数字取几次
		f(a,0,21);
	}
	private static BigInteger [] base = new BigInteger[10];
	 private static BigInteger calcu_21(int n) {
		 BigInteger a = BigInteger.ONE;
		 for(int i = 0;i<21;i++) {
			 a = a.multiply(BigInteger.valueOf(n));
		 }
		 return a;
	 }
	 private static void test(int [] a) {
		 BigInteger bn = BigInteger.ZERO;
		 for(int i = 0;i<a.length;i++) {
			 bn = bn.add(base[i].multiply(BigInteger.valueOf(a[i])));
		 }
		 String s = bn.toString();
		 if(s.length()!=21) return;
		 int [] b = new int [10];
		 for(int i = 0;i<s.length();i++) {
			 b[s.charAt(i)-'0'] ++;
		 }
		 for(int i = 0;i<10;i++) {
			 if(a[i]!=b[i]) return;
		 }
		 System.out.println(bn);
	 }
	 //处理第k个,还有sum个名额
	 private static void f(int [] a ,int k,int sum) {
		 if(sum==0) {
			 test(a);
			 return;
		 }
		 if(k==a.length-1) {
			 a[k] = sum;
			 test(a);
			 return;
		 }
		 for(int i = 0;i<=sum;i++) {
			 a[k] = i;
			 f(a,k+1,sum-i);
			 a[k] = 0;
		 }
	 }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值