每個數均可表示成若干個完全平方數(1,4,9,16,25……)之和
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[n]!=0){ return data[n]; } //窮舉 如果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[n]=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); } }
相關推薦
每個數均可表示成若干個完全平方數(1,4,9,16,25……)之和
JAVA程式設計:每個數均可表示成若干個完全平方數(1,4,9,16,25……)之和,完全平方數是可重複,求出n的一種組合要求完全平方數的個數最少。如:12=4+4+4;13=4+9 package test; import java.util.Scanner; publi
一個數加上100是個完全平方數,再加上168又是一個完全平方數, (含優化)
public class HisTime { public static void main(String[] args) { long startTime = System.currentTimeMillis();
編寫一個程式,求出滿足下列條件的四位數:該數是個完全平方數,且第一、三位數字之和為10,第二、四位數字之積為12
編寫一個程式,求出滿足下列條件的四位數:該數是個完全平方數,且第一、三位數字之和為10,第二、四位數字之積為12 程式碼: #include <stdio.h> #include <math.h> //編寫一個程式,求出滿足下列條件的四位數: //該數是個
求給定數等於最少的幾個完全平方數之和
given an integer ,find 最小長度minlen 的expression of integer, minlen 定義為多少個完全平方數相加?例如 14 = 1 + 4 + 9, minlen = 3int MinExpressionInteger(int
Linux_C練習:編寫一個程式,求出滿足下列條件的四位數:該數是個完全平方數,且第一、三位數字之和為10,第二、四位數字之積為12;
#include<stdio.h> #include<math.h> int main() { int num; int s1; int s2; for(num = 30; num < 100; ++num) { int r
編寫程式實現以下功能: 隨機產生20個正整數存入陣列a中,且每個數均在1000-9999之間(包含1000和9999)。對陣列進行排序,要求按每個數的後三位的大小進行升序排列,然後取出滿足此條
<span style="font-size:24px;">int a[20] = {0};//定義一個數組 for (int i = 0; i < 20; i++) { a[i] = arc4random() % (9999 -
將自然數1--9這九個數分成三組,將每組的三個數字拼成三位數,每個數字不能重複,且每個三位數都是完全平方數。請找出這樣的三個三位數。
program p1;var a:array[1..3]of integer; i,j,k,x:integer;function yes:boolean;var i:integer; d:set of 0..9;begin d:=[]; for i:=1 to 3 do d:=d+[a[i] d
2的n次冪,判斷一個數是否能寫成m個2相乘,LeetCode 231號問題 給定一個整數,編寫一個函式來判斷它是否是 2 的冪次方。
2的n次冪,判斷一個數是否能寫成m個2相乘,LeetCode 231號問題 給定一個整數,編寫一個函式來判斷它是否是 2 的冪次方。 示例 1: 輸入: 1 輸出: true 解釋: 20 = 1 示例 2: 輸入: 16 輸出: true 解釋: 24 = 16 示例 3:
把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。
題目描述 把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。 /*
哥德巴赫猜想:任何一個>=4之偶數,都可以表示成兩個奇質數之和.
任何一個>=4之偶數,都可以表示成兩個奇質數之和. 分析思路: 1.給定一個範圍,找出這個範圍裡面的所有質數(用空間換時間,效能提高),將其儲存到一個數組中 2.使用迴圈,將這個範圍 和 質數陣列 傳入 一個方法,判斷是否成立。找出所有大於4的偶數
數論概論讀書筆記 25.哪些數可表成兩個平方數之和
哪些數可表成兩個平方數之和 對於一個正整數mm ,如果mm每個素因子都可以表示成兩個平方數之和,則素因子分解後,用公式 (u2+v2)(A2+B2)=(uA+vB)2+(vA−uB)2(u2+v2)
求一個數最少能表示成幾個數的平方和(比如5=1+4,返回2)
bool is_sqrt(long long n) { int m = sqrt(n); if (m*m == n) return true; else
有一個正整數N可以分解成若干個正整數之和,問如何分解能使這些數的乘積最大?
著作權歸作者所有。 商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 作者:人子立 連結:https://www.zhihu.com/question/30071017/answer/4758474
經典問題:字串可分割成多少個相同重疊/不重疊子串(2087)
The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e'. He was a member of the Oulipo group. A quote from th
762. 二進位制表示中質數個計算置位 二進位制1的個數
給定兩個整數 L 和 R ,找到閉區間 [L, R] 範圍內,計算置位位數為質數的整數個數。 (注意,計算置位代表二進位制表示中1的個數。例如 21 的二進位制表示 10101 有 3 個計算置位。還有,1 不是質數。) 示例 1: 輸入: L = 6, R = 10
把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。
// 輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉
Java中從m個數中隨機選取n個不同的數(m>=n),並進行排序
我這裡直接給出我寫的函式,只需傳入引數便可直接使用://從x-y中的數中隨機找出num個不同的數,返回給integer的動態陣列中ArrayList<Integer> makeRandom(int x, int y, int num) {
1000個數範圍[0,999],有2個相同的數,求這個數
import java.util.Arrays; public class SearchDemo { /** *被搜尋資料的大小 */ private static final int siz
面試題: 求N個數中前k個大的數(大資料)
解題思路:一般思路就是將N個數排序後,取前k個數就ok。但是如果N個數是幾十億個數,載入不到記憶體怎麼辦?這就需要另外一種思路了,那就是利用堆。 具體的思路是:先建一個k個數的小堆,然後從k+1個數往
hibernate多對多對映拆成2個一對多對映(註解)
hibernate的many to many確實很是方便我們處理實體和集合間的關係,並可以通過級聯的方法處理集合,但有的時候many to many不能滿足我們的需要,比如 使用者<--->選課,典型的多對多關係,一般情況下,會生成 course_user(course_id,user_id);