2010年4月18日 星期日

Problem 11428 Cubes,立方相減

須求出兩立方相減小於 10000 的數,找出最大不過 583 - 573 = 9919,若 593 - 583 = 10267 就會超過,所以先找出 0 ~ 58 的立方,再用巢狀迴圈去找出每一個相減的結果,並且設置一個結構記錄這些結果,寫成 C 語言程式碼如下:
struct solution
{
int i;
int j;
int sol;
};
struct solution s[10001];
int pow3[59];

void create()
{
int i, j;
for (i = 0; i < 59; i ++)
pow3[i] = i * i * i;
for (i = 58; i >= 0; i --)
for (j = 0; j <= i; j ++)
{
int tmp = pow3[i] - pow3[j];
if (tmp <= 10000)
{
s[tmp].sol = 1;
s[tmp].i = i;
s[tmp].j = j;
}
}
}

最後一樣對應索引印出結果:
if (s[n].sol)
printf("%d %d\n", s[n].i, s[n].j);
else
printf("No solution\n");

By David.K

p11428題目連結
回ACM題庫目錄
回首頁

沒有留言: