當前位置:編程學習大全網 - 編程軟體 - C語言。。完美立方。。求大神

C語言。。完美立方。。求大神

您好!很高興為您解答。

改代碼事小,把算法邏輯中的錯誤找到才是關鍵。

按LZ的邏輯:

for(a=5;a<=n;a++){

for(d=a-1;d>3;d--){

for(c=d-1;c>2;c--){

for(b=c-1;b>1;b--){

我比較能理解LZ的想法,a非降序的條件下,保證a相同時d非升序排列(相當於b+c升序),再保證d相同時c非升序排列(相當於b升序),因此保證了b升序排列。

但前提是只有a相同時d也相同才能保證c非升序,b升序;如果a相同時d降序,上面的邏輯完全不適用(不知道LZ有沒有體會到這層意思……),就比如:

(87,20,54,79)

(87,38,48,79)

此處d都為79,所以只要c非升序,b壹定升序。

而下面:

(90,25,38,87)

(90,10,60,80)

壹旦d降序排列,就不能保證c非升序排列,同時如果很不幸地c升值得比d降值大得多,b就變成降序排列了,出錯。

如果要優先確保b為降序排列,那就應該把b的循環寫在前面才能夠很好地控制。

程序修改如下:

#include<stdio.h>

int main()

{

int n,a,b,c,d;

scanf("%d",&n);

for(a=5;a<=n;a++){

for(b=4;b<=a-1;b++){

for(c=3;c<b-1;c++){

for(d=2;d<=c-1;d++){

if(a*a*a==b*b*b+c*c*c+d*d*d){

printf("Cube = %d, Triple = (%d,%d,%d)\n",a,b,c,d);

}

}

}

}

}

return 0;

}

望采納~如您還有不解,歡迎追問~

  • 上一篇:學習影視多媒體應該用什麽配置電腦?
  • 下一篇:單片機能定義多少個變量
  • copyright 2024編程學習大全網