Math Pro 數學補給站's Archiver

大膽假設,小心求證。

ksjeng 發表於 2010-2-11 19:10

懇請老師協助指正程式撰寫的錯誤-用迴圈跑三次方程式

老師好
我要寫一個程式
用來證明
3^3+4^3+5^3=6^3
此時的3,4,5,6是唯一
所以我設計如下
a^3+b^3+c^3=d^3
我想檢查程式是否會跑出
a=3,b=4,c=5,d=6
但是我寫完了之後
發現程式中有好多打x
懇請老師協助指正
我用的軟體是D++4.9.9.2

#include <iostream>
#include <cmath>
int main()
{
    int a=0,b=0,c=0,d=0;
    int s=0,t=0,u=0,v=0;w=0;
    for (a=0;a<10;a++)
        for (b=0;b<10;b++)
            for (c=0;c<10;c++)
                for (d=0;d<10;d++)
                {
                    s = (int)(pow(a,3));
                    t = (int)(pow(b,3));
                    u = (int)(pow(c,3));
                    v = (int)s+t+u;
                    w = (int)(pow(d,3));
                    if (v==w)
                       std::cout << a << b << c << d << "\n";
                }
                system("pause");

[[i] 本帖最後由 ksjeng 於 2010-2-11 08:55 PM 編輯 [/i]]

weiye 發表於 2010-2-11 22:49

[code]int s=0,t=0,u=0,v=0;w=0;[/code]
w 前面的逗號,誤打成分號了。

[code]                    s = (int)(pow(a,3));
                    t = (int)(pow(b,3));
                    u = (int)(pow(c,3));
                    v = (int)s+t+u;
                    w = (int)(pow(d,3));[/code]

在 a,b,c,d 前面都加一個 (float) 吧。變成
[code]                    s = (int)(pow((float)a,3));
                    t = (int)(pow((float)b,3));
                    u = (int)(pow((float)c,3));
                    v = (int)s+t+u;
                    w = (int)(pow((float)d,3));[/code]

ksjeng 發表於 2010-2-12 00:23

老師晚安
謝謝您撥冗指正
還有一個小問題
底下這一行程式說它是錯誤的
[b]x[/b]                      std::cout << a << b << c << d << "\n";    [b]syntax error before ':' token [/b]

[[i] 本帖最後由 ksjeng 於 2010-2-12 12:31 AM 編輯 [/i]]

weiye 發表於 2010-2-12 00:43

[quote]原帖由 [i]ksjeng[/i] 於 2010-2-12 12:23 AM 發表 [url=https://math.pro/db/redirect.php?goto=findpost&pid=1852&ptid=904][img]https://math.pro/db/images/common/back.gif[/img][/url]
老師晚安
謝謝您撥冗指正
還有一個小問題
底下這一行程式說它是錯誤的
x                      std::cout  [/quote]
在第一行加上[code]#include <cstdlib>[/code]

ksjeng 發表於 2010-2-12 00:49

0000
0011
0022
0033
0044
0055
0066
0077
0088
0099
0101
0202
0303
0404
0505
0606
0707
0808
0909
1001
1689
1869
2002
3003
4004
5005
6006
6189
6819
7007
8008
8169
8619
9009
請按任意鍵繼續 . . .

結果是出現這些
但結果猜想應是a=3,b=4,c=5,d=6
3456好像不在其中
跟我使用完全立方式證得它是唯一有衝突
老師怎辦
剛用計算機按6^3+1^3+8^3=9^3是對的
顛覆我之前的證明

[[i] 本帖最後由 ksjeng 於 2010-2-12 12:57 AM 編輯 [/i]]

weiye 發表於 2010-2-12 00:58

我執行出來的結果是[code]0000
0011
0022
0033
0044
0055
0066
0077
0088
0099
0101
0202
0303
0404
0505
0606
0707
0808
0909
1001
1689
1869
2002
3003
3456
3546
4004
4356
4536
5005
5346
5436
6006
6189
6819
7007
8008
8169
8619
9009[/code]那些有兩個變數值是零的顯然會成立,

除了  \(\displaystyle 3^3+4^3+5^3=216=6^3,\)

似乎還有一個  \(\displaystyle 1^3+6^3+8^3=729=9^3\) 也會成立。

ksjeng 發表於 2010-2-12 01:02

老師
同一個程式
你執行起來有3456
但我的卻沒有
跟我安裝的軟體有關嗎
或是我的程式設定有誤嗎
懇請撥冗指點

[[i] 本帖最後由 ksjeng 於 2010-2-12 01:05 AM 編輯 [/i]]

weiye 發表於 2010-2-12 01:05

[code]
#include <cstdlib>
#include <iostream>
#include <cmath>

int main(int argc, char *argv[])
{
    int a=0,b=0,c=0,d=0;
    int s=0,t=0,u=0,v=0,w=0;
    for (a=0;a<10;a++)
        for (b=0;b<10;b++)
            for (c=0;c<10;c++)
                for (d=0;d<10;d++)
                {
                    s = (int)(pow((float)a,3));
                    t = (int)(pow((float)b,3));
                    u = (int)(pow((float)c,3));
                    v = (int)s+t+u;
                    w = (int)(pow((float)d,3));
                    if (v==w)
                       std::cout << a << b << c << d << "\n";
                }
   
    system("PAUSE");
    return EXIT_SUCCESS;
}
[/code]我是套用你寫的程式而已(如上),

執行結果的確如之前回覆,有 3456 這一組。

IDE 與編譯器使用的是 Dev C++ 4.9.9.2 with Mingw/GCC 3.4.2

我想應該就是你所指的 D++4.9.9.2 。

下載網址:[url=http://www.bloodshed.net/dev/devcpp.html]http://www.bloodshed.net/dev/devcpp.html[/url]

何以結果不同,這我就不知道了。

ksjeng 發表於 2010-2-12 01:20

老師
我會重新啟動之後再試一次
謝謝您
晚安

ksjeng 發表於 2010-2-12 21:46

老師
我殺掉後
下載重灌
結果還是
0000
0011
0022
0033
0044
0055
0066
0077
0088
0099
0101
0202
0303
0404
0505
0606
0707
0808
0909
1001
1689
1869
2002
3003
4004
5005
6006
6189
6819
7007
8008
8169
8619
9009
請按任意鍵繼續 . . .
-----------
好美妙的一件事
一程式碼 兩端執行
竟有兩種結果
祝老師新年快樂

ksjeng 發表於 2010-2-13 12:30

老師
這是我在筆電執行的畫面
懇請協助觀看是否有任何異狀嗎
[img]http://farm5.static.flickr.com/4015/4352259901_440f78c95f_o.jpg[/img]

weiye 發表於 2010-2-13 21:14

剛剛仔仔細看了一下,

在標頭檔後,我的檔案裡還有一句,[code]using namespace std;[/code]看來有可能是差在這裡,呵。

ksjeng 發表於 2010-2-13 23:36

謝謝老師撥冗指正,終於成功了!

0000
0011
0022
0033
0044
0055
0066
0077
0088
0099
0101
0202
0303
0404
0505
0606
0707
0808
0909
1001
1689
1869
2002
3003
3456
3546
4004
4356
4536
5005
5346
5436
6006
6189
6819
7007
8008
8169
8619
9009
請按任意鍵繼續 . . .
原來少了那一行
結果就差很大
底下附上很多網友討論那一行耶
[url=http://www.student.tw/db/showthread.php?t=79417]http://www.student.tw/db/showthread.php?t=79417[/url]
最後祝老師新年快樂

[[i] 本帖最後由 ksjeng 於 2010-2-13 11:43 PM 編輯 [/i]]

ksjeng 發表於 2010-2-20 18:28

用一個舊檔來開啟時,竟會有下列錯誤,為什麼?

[img]http://farm3.static.flickr.com/2780/4371920609_c8b9fd8e52_o.jpg[/img]

[[i] 本帖最後由 ksjeng 於 2010-2-20 08:43 PM 編輯 [/i]]

weiye 發表於 2010-2-20 23:50

1. 沒有建立 project?(不知是否會有影響)

2. 資料夾有中文名稱?(不知是否會有影響)

3. 為什麼你是用 .c 而非 .cpp,難不成開新專案時你是選 〝C Project〞 而非 〝C++ Project〞?(不知是否會有影響)

可以新建一個 C++ 的 Project,然後放在路徑沒有中文的資料夾,再踹踹看囉。

ksjeng 發表於 2010-2-21 00:54


我懂了
我是看操作手冊(明解C語言教學手冊柴田望洋 博碩文化)把它設成*.C
我把它改成C++ Project去跑之後 果然就解決這個問題了
原來還可以這麼另存檔案
大學時代不用功 以至於書到用時方恨少所致
謝謝老師
新年快樂

頁: [1]

論壇程式使用 Discuz! Archiver   © 2001-2022 Comsenz Inc.