03. 找一個最小的自然數(shù),使它等于不同的兩組三個自然數(shù)的三次冪之和,即找最小的x,使得:
x=a*a*a+b*b*b+c*c*c+d*d*d+e*e*e+f*f*f
其中,a,b,c,d,e,f都是自然數(shù),a<=b<=c<=d<=e<=f; [a,b,c]!=[d,e,f]
解:
利用上一問題的求解思想,上一問題在正方形平面下三角區(qū)內(nèi)找解,本題在正立方體的下三角棱內(nèi)找解。記i為三角棱體的平面,j為某平面的行,k為某行上的列。當前考察的下三角棱體的范圍由最上平面至最下平面控制;對應(yīng)每個平面的下三角區(qū)域,在每個下三角區(qū)域內(nèi)當前待考查的行可由行的下界和上界控制,每個有效行上的候選列由其當前列來表示。因此有如下解法:
算法---找一個最小的自然數(shù)x,使它等于不同的兩組三個自然數(shù)的三次冪之和
{
以三角棱體的頂點為最初候選者;
為最初尋找平面設(shè)定行的變化范圍和列的初值;
do
{
保存上一個候選者;
if(當前候選者在最下平面)
{
尋找平面范圍的最下平面向下進一層;
為新平面設(shè)定行的變化范圍;
}
if(在最上平面最下角點找到候選者)
尋找平面范圍的最上平面向下進一層;
else
{
if(在第一列找到候選者)
{
當前平面的行的變化上增1;
置當前平面的行的列為1;
}
if(在對角線上找到候選者)
當前平在的行的變化下界增1;
else
調(diào)整當前平面當前行的列號值;
}
在當前最上平面至當前最下平面范圍內(nèi)尋找最小值的候選者;
}while(兩候選者對應(yīng)的值不相等);
輸出解;
}
因每個平面有行變化的下界和上界,程序分別用兩個一維數(shù)組來存貯;每個平面的每行都有一個當前列,程序用一個二維數(shù)組來存貯;為避免反復計算一個整數(shù)的三次冪,另引入一個一維數(shù)組,對應(yīng)第i下標位置存貯i*i*i。令當前找到的候選者為i1,j1,k表示在i1平面的第j1行的k1列找到的候選者。因候選者限制在三角棱內(nèi),i1,j1,k1滿足條件:
i1>=j1>=k1
當候選者在最下平面時,則最下平面向下進一層,并為新平面設(shè)定行的變化范圍和對應(yīng)列號;當前最上平面的最下角點找到候選者時,最上平面向下進一層;當在第一列找到候選者時,當前平面的行的上界增,并為新的行設(shè)定初始列號;當在某行的對角線上找到候選者時,該行不應(yīng)該再被考慮,當前平面的行的下界增1;其它情況,當前行的下一列將會被考慮,為該行調(diào)整當前列。在調(diào)整當前平面的行的下界和上界時,應(yīng)不能超過當前平面號。為在三角棱體的當前有效平面內(nèi)找最小值的候選者,先假定最上平面的最小行的當前列為下一個候選者,然后自最上平面至最下平面,每個平面自最小行至行,尋找最小值所在平面號、行號和列號。
x=a*a*a+b*b*b+c*c*c+d*d*d+e*e*e+f*f*f
其中,a,b,c,d,e,f都是自然數(shù),a<=b<=c<=d<=e<=f; [a,b,c]!=[d,e,f]
解:
利用上一問題的求解思想,上一問題在正方形平面下三角區(qū)內(nèi)找解,本題在正立方體的下三角棱內(nèi)找解。記i為三角棱體的平面,j為某平面的行,k為某行上的列。當前考察的下三角棱體的范圍由最上平面至最下平面控制;對應(yīng)每個平面的下三角區(qū)域,在每個下三角區(qū)域內(nèi)當前待考查的行可由行的下界和上界控制,每個有效行上的候選列由其當前列來表示。因此有如下解法:
算法---找一個最小的自然數(shù)x,使它等于不同的兩組三個自然數(shù)的三次冪之和
{
以三角棱體的頂點為最初候選者;
為最初尋找平面設(shè)定行的變化范圍和列的初值;
do
{
保存上一個候選者;
if(當前候選者在最下平面)
{
尋找平面范圍的最下平面向下進一層;
為新平面設(shè)定行的變化范圍;
}
if(在最上平面最下角點找到候選者)
尋找平面范圍的最上平面向下進一層;
else
{
if(在第一列找到候選者)
{
當前平面的行的變化上增1;
置當前平面的行的列為1;
}
if(在對角線上找到候選者)
當前平在的行的變化下界增1;
else
調(diào)整當前平面當前行的列號值;
}
在當前最上平面至當前最下平面范圍內(nèi)尋找最小值的候選者;
}while(兩候選者對應(yīng)的值不相等);
輸出解;
}
因每個平面有行變化的下界和上界,程序分別用兩個一維數(shù)組來存貯;每個平面的每行都有一個當前列,程序用一個二維數(shù)組來存貯;為避免反復計算一個整數(shù)的三次冪,另引入一個一維數(shù)組,對應(yīng)第i下標位置存貯i*i*i。令當前找到的候選者為i1,j1,k表示在i1平面的第j1行的k1列找到的候選者。因候選者限制在三角棱內(nèi),i1,j1,k1滿足條件:
i1>=j1>=k1
當候選者在最下平面時,則最下平面向下進一層,并為新平面設(shè)定行的變化范圍和對應(yīng)列號;當前最上平面的最下角點找到候選者時,最上平面向下進一層;當在第一列找到候選者時,當前平面的行的上界增,并為新的行設(shè)定初始列號;當在某行的對角線上找到候選者時,該行不應(yīng)該再被考慮,當前平面的行的下界增1;其它情況,當前行的下一列將會被考慮,為該行調(diào)整當前列。在調(diào)整當前平面的行的下界和上界時,應(yīng)不能超過當前平面號。為在三角棱體的當前有效平面內(nèi)找最小值的候選者,先假定最上平面的最小行的當前列為下一個候選者,然后自最上平面至最下平面,每個平面自最小行至行,尋找最小值所在平面號、行號和列號。