Java B組藍橋杯第十屆國賽:平方拆分

試題 B: 平方拆分
本題總分:5 分
【問題描述】
將 2019 拆分爲若干個兩兩不同的完全平方數之和,一共有多少種不同的方
法?
注意交換順序視爲同一種方法,例如 13 2 + 25 2 + 35 2 = 2019 與 13 2 + 35 2 +
25 2 = 2019 視爲同一種方法。
【答案提交】
這是一道結果填空的題,你只需要算出結果後提交即可。本題的結果爲一
個整數,在提交答案時只填寫這個整數,填寫多餘的內容將無法得分。








尷尬,感謝大佬的指正,我還以爲是隻要三位平方數,太馬虎了。

題目上要若干個,需要利用深度搜索進行統計。

這裏值得注意的是,起始位置應該是從1開始,如果從0開始就會造成下列情況:(用題目的例子舉例子)

從0開始深度搜索,會得到 :( 0 , 13  ,  25   , 35) 和(13  ,  25    , 35)

而從1開始深度搜索,只會得到:(13  ,  25    , 35)

這兩種情況因爲沒有具體答案,我個人感覺應該第二種,得到的答案:

答案:26287

public class Main {
    int sum; 
	public Main() {
		dfs(2019,1,45);
		System.out.println(sum);
	}
    public void dfs(int num, int min, int max) {
	    if (num < 0) {
	        return;
	    }
	    if (num == 0) {
	        sum ++;
	        return;
	    }
	    for (int i = min; i < max; i++) {
	         dfs(num - i * i, i + 1, max);
	    }
	} 
	public static void main(String[] args) {
		new Main();
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章