class Kadai1018{ public static void main(String[] args){ int count,a,i,j,n=30; for(a=0;a<=10000;a++){ count=0; for(i=1;i<=n;i++) for(j=i;j<=n;j++) if(a==i*i*i+j*j*j) count++; if(count==2) System.out.println(a); } } }
class Kadai1018{ public static void main(String[] args){ int check[]=new int[10000+1]; for(int i=1;i<=10000;i++){ check[i]=0; }; for(int i=1;(i*i*i)<=10000;i++){ for(int j=1;j<=i;j++){ int k=(i*i*i)+(j*j*j); if(k<=10000){ check[k]++; }; }; }; for(int i=1;i<=10000;i++){ if (check[i]>=2){ System.out.println(i); }; }; } }
//学生証番号XXXXXX //XXXXXX //はっきり言って力業です。遅いけれどもゴリ押しで何とかできます。 class Kadai1018{ public static void main(String[] args){ int a,b,c,d,n; for(n=1;n< 10000;n++) for(a=1;a< Math.pow(n,1.0/3.0);a++) for(b=a;b< Math.pow(n,1.0/3.0);b++) if(a*a*a+b*b*b==n) // (a) for(c=1;c!=a;c++) for(d=c;d< Math.pow(n,1.0/3.0);d++) // (b) if(n==c*c*c+d*d*d){ System.out.println(n +"="+ a +"*"+ a +"*"+ a +"+"+ b +"*"+ b +"*"+ b +"="+ c +"*"+ c +"*"+ c +"+"+ d +"*"+ d +"*"+ d ); } } }
1729 = 13+123 = 93 + 103 4104 = 23+163 = 93 + 153の2つ(どのように分解されるかを表示しなくても正解とした).タクシーのナ ンバーは1729だったと分かる.全員が正しい答えを出している.
想定した解答は解答(1)のようなプログラムだが,効率は余り良くない (223 = 10648なのでnは21でも良い).解答(2)は配列(今回やる)を 使っているので前回までの範囲は超えているが,実行速度は100倍位速い.
解答(3)は解答(1)を4重のループにして,変数countを使わないようにしたも ので,実行はほとんど変らないがこちらのプログラムの方が理解しやすい人も いるかもしれない.途中までは,(a)の行が(b)の位置に入っていたため,100 倍以上遅いプログラムになっていた.
Forbidden You don't have permission to access /~ktanaka/programming00/kadai1025.html on this server.とうメッセージが出てアクセ スできないはずである.17:00以降にも同様のエラーが出る時は,Shiftキーを 押しながら,再読み込み(Reload)を押してみること.