问题求解——数学黑洞1
问题求解——数学黑洞1
zengxiangwei 发表于4年前
问题求解——数学黑洞1
  • 发表于 4年前
  • 阅读 95
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

/*******************************************************



1. 设定一个任意数字串,数出这个数中的偶数个数,奇数个数,

及这个数中所包含的所有位数的总数,将答案按 “偶-奇-总”

的位序,排出得到新数。重复进行,最后会得到 123。

分析:

  对任意的n位数,n > 3,那么它会他形成的新数,会比原来的数

小得多,如两百位的数,演变成的数最多不会超过9位,

设 数m的位数为n,n> 3时,演变成的数不会超过n的位数K的3倍

t = m/(10^n)   (1=<t <10;  )

tt = n/(10^k)     (1<=tt<10)

令t = tt; m =t*10^n  n = t*10^k

n = log(m/t) =>  n =log(m)

k = log(n) ;

当m大于等于1000时,n = log(m)>=3; k=log(n)

log(m) + 1 > 3(log(n) +1)

所以任意大于等于1000的数必将收敛在1000以内

故而只需验证1000以内的数即可;

如:32165489012347652348976523425423  ——> 171431 ——>156——>123

*********************************************************/
/***********************************************************
Copyright (c)哈尔滨工程大学  曾相未  保留所有权利。

文件名: Test_5_1.java

描述: 问题求解——数学黑洞
作者: 曾相未
时间:2013/10/24
*************************************************************/

class Test_5_1{
	//求演变的下一个数
	int newNumber(int oldNum){
		int odd = 0;//奇数计数
		int even = 0;//偶数计数
		int t = oldNum;
		int tt;
		while(true)
		{
			tt = t % 10;
			if(tt % 2 == 0) even ++;
			else odd++;
			t = t / 10;//下一位数
			if(t == 0) break;//统计完毕,退出
		}
		tt = odd + even;//数的总数
		t = even * iCRight(odd) + odd;//将奇数个数写在偶数后面形成新数
		t = t * iCRight(tt) + tt;//将数总的个数写在奇数后面形成新数
		return t;	
	}
	//计算当前数占位,便于将其写在其它数后
	int iCRight(int num){
		int t = num;
		int result = 1;//至少占一位
		while(true)
		{
			t = t / 10;//下一位
			if( t == 0) return result * 10;
			result = result * 10;//位权计算
		}
	}


	public static void main(String []args){
		Test_5_1  test =  new Test_5_1();
		//验证 1000以内的正整数
		for(int j = 1; j < 1000;j ++)
		{
			System.out.print(j + ":  ");
			int midbody = j;//代换变量
			while(true)
			{
				System.out.print(midbody + "  ");
				if(midbody == 123) break;//到123 ,该结束了
				midbody = test.newNumber(midbody);
			}
			System.out.println();
		}
	}
}
共有 人打赏支持
粉丝 9
博文 14
码字总数 18092
×
zengxiangwei
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: