每个数均可表示成若干个完全平方数(1,4,9,16,25……)之和
2016-09-22 11:24
267 查看
JAVA编程:每个数均可表示成若干个完全平方数(1,4,9,16,25……)之和,完全平方数是可重复,求出n的一种组合要求完全平方数的个数最少。如:12=4+4+4;13=4+9
package test; import java.util.Scanner; public class Main { static int data[]=new int[10000001]; public static void main(String args[]){ // int n=new Scanner(System.in).nextInt(); // System.out.println(Method(n)); method(); } static int Method(int n){ //如果n是完全平方数,返回结果 只需一次 递归出口 if(Math.pow((int)Math.sqrt(n),2)==n){ return 1; }else{ if(data !=0){ return data ; } //穷举 如果13,就穷举1+12 2+11 …… //当执行f(1)+f(12)时 //f(1)=1, f(12)再执行穷举,依次类推 //最终得出最少次数,比如f(4)+f(9)=2,即为最终结果. int min=Method(n-1)+Method(1); for(int i=1;i<=n/2;i++){ if(Method(i)+Method(n-i)<min){ min=Method(i)+Method(n-i); } } data =min; return min; } } static void method(){ System.out.println("请输入一个正整数:"); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); boolean flag = true; int count = 0; String str =""; while(flag){ int a = (int) Math.sqrt(num);//开根 int n_x = (int) (num - Math.pow(a, 2));//number-最大完全平方数 num = n_x; if(n_x == 0){ flag = false; } if(count==0){ str = str + (int)Math.pow(a, 2); }else{ str = str + "+" + (int)Math.pow(a, 2); } count++; } System.out.println("总个数"+count+"\t"+str); } }
相关文章推荐
- 输入若干个整数,当输入0时表示结束,统计每个输入整数的出现次数。
- 智力题-在某次数学竞赛中共有甲乙丙三题,共25人参加竞赛,每个同学至少做一道题。在所有没解出甲题
- 输入包括两行,第一行是一个正整数N(N<=1000000),表示理工大共N个美女。第二行有N个正整数分别表示N位美女的身高,每个正整数的值不会超过10^9。 (输入数据之间会用空格隔开)
- (16)面向对象、类、对象、不同引用指向同一对象内存表示
- 16*16的雷盘面 随机五个雷(1表示雷)
- 传两个整型参数(如 15,24)建一张表15,16,17。。。24 每个数为一条记录的表
- 输入包括两行,第一行是一个正整数N(N<=1000000),表示理工大共N个美女。第二行有N个正整数分别表示N位美女的身高,每个正整数的值不会超过10^9。 (输入数据之间会用空格隔开)
- ffmpeg-201701[10,16,21,23,25]-bin.7z
- 数据结构(16)顺序栈的表示和算法表示
- 16.(25)linux备份策略
- 初学 Delphi 嵌入汇编[16] - 进制的表示方法
- Java 中 8 进制和 16 进制的表示方法
- ntohs的一个简单实现(将网络流中用两个字节16进制表示的资源数(如DNS)和长度转换为整形)
- 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。
- text1.txt begin10 11 12 20 21 22 30 31 32 end text2.txt begin 15 16 17 25 26 27 35 36 37 得到text3.txt
- 供应施耐德MT框架开关MT10 MT12 MT16 MT20 MT25 MT32 MT40 MT63
- 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转
- 2012年5月31日23:16:25
- 补码中有正负零吗?当然没有!每个数字都是唯一表示的啦
- (16) [转载]:整数的二进制表示中1的个数