推介:| 學英文 | Esse益生菌護膚品 | 駿寶燃氣工程 Chun Po Gas | 解夢分析師證書 | 銅鑼灣乾炒牛河 |

發新話題
打印

[疑難] 以下C++程式有沒有出錯

以下C++程式有沒有出錯

以下是一個隨機函式, 如果沒有出錯的話可以不用理會
#include<iostream>
#include<cstdlib>    // 隨機函式rand與設定隨機函式初值的函式srand
#include<ctime>      // 程式在執行時的時刻資料 time

using namespace std;

int main() {

       // 以程式執行的時間來設定隨機函式的初始值
       srand(static_cast < unsigned int >(time(NULL)));
      
       // 產生十個0到9之間的隨機整數
       for(int i=0; i<10; ++i) cout << rand()%10 << ' ';
       cout << '\n';
      
       system("pause");
       return 0;
}

[ 本帖最後由 花之慶次 於 2007-2-20 13:53 編輯 ]

TOP

是一個隨機産生10個由0至9的數字的程式!
沒問題啊!
用borland bcc55 free command line tool編譯後,
運行順利, 感覺良好!
IT代工/鎗手一名!
小弟並唔平, 但絕唔係貴!

TOP

好, 多謝你!!!

TOP

留意紅字部份:
#include<iostream>
#include<stdlib.h>
#include<iomanip>

using namespace std;

int main(){

       // a: 被乘數, b: 乘數
       int a, b, c, i, no;
      
       cout << ">請輸入兩正數 :";
      
       // 輸入a, b
       cin >> a >> b;
      
       // 列印aXb的直式部份
       cout << "\n"
            << setw(10) << a << endl
            << setw(3) << "x" << setw(7) << b << endl
            << setw(10) << "-------------" << endl;
       // 計算b由個位數起的每一位數(存入c), 分別乘以a的值
       // i:控制輸出的位置
       // no:儲存乘數b重複除以10後的值
      
       i = 0;
       no = b;
       while(no){
           c=no%10;
           no=no/10;
           cout << setw(10-i) << c*a << endl;
           ++i;
      }
      
      // 列印最後的相乘結果
      cout << setw(10) << "-----------" << endl;
           << setw(10) << a * b << endl;      
      system("pause");
      return 0;
}                              
      

在紅字部份中所明確指出的是parse, 下一步我應該如何改正呢??

TOP

還有這個程式, 嚴格上應該沒有問題, 但不知何故不能執行:
#include<iostream>
#include<stdlib.h>
#include<iomanip>

using namespace std;

int main(){

     int F, O, R,T,Y, E, N, S, I, X;
     int i, j, t, y;
     int forty, ten, sixty;
     
     // 站圈由最小的數字到最大的數字
     for(i=10234; i<98766; ++i){
     
     // 分別計算各個數字, 及檢查其數字不能重複
     
     F = i/10000;
     O = (i/1000)%10;
     if(0==F)continue;
     
     R = (i/100)%10;
     if(R==F||R==0)continue;
     
     T=(i/10)%10;
     if(T==F||T==0||T==R)continue;
     
     y=i%10;
     if(Y==F||Y==0||Y==R||Y==T)continue;
     
     forty=F*10000+0*1000+R*100+t*10+y;
     for(j=1; j<99; ++j){
     
         E = j/10;
         if(E==F||E==0||E==R||E==T||E==Y)continue;
         
         N = j%10;
         if(N==F||N==0||N==R||N==T||N==Y||N==E)continue;
         
         ten = T*100+E*10+N;
         
         sixty=forty+ten+ten;
         
         S=sixty/10000;
         I=sixty/10000%10;
         X=sixty/100%10;
         t=sixty/10%10;
         y=sixty%10;
         
         if(y!=Y||t!=T)continue;
         if(S==F||S==0||S==R||S==T||S==Y||S==E||S==N)continue;
         if(I==F||I==0||I==R||I==T||I==Y||I==E||I==N||I==S)continue;
         if(X==F||X==0||X==R||X==T||X==Y|X==E||X==N||X==S||X==I)continue;
         
         // 列印結果
         cout << setw(10) << forty << endl
              << setw(10) << ten << endl
              << setw(3) << " +" << setw(7)<< ten << endl
              << setw(11) << "---------" << endl
              << setw(10) << sixty << endl;
              }
       }
      
       system("pause");
       return 0;
      
}

TOP

小弟相信是
if (S==F||S==0||S==R||S==T||S==Y||S==E||S==N) continue;
此句讓程式永遠回到for-loop的開頭,
沒法執行下面的statements.

小弟想請問一下此程式是用來幹什麼的?
IT代工/鎗手一名!
小弟並唔平, 但絕唔係貴!

TOP

小弟我看不懂
duibuqi

TOP

引用:
原帖由 jayzhou_2046 於 2007-2-22 11:46 發表
小弟相信是
if (S==F||S==0||S==R||S==T||S==Y||S==E||S==N) continue;
此句讓程式永遠回到for-loop的開頭,
沒法執行下面的statements.

小弟想請問一下此程式是用來幹什麼的?
這是一個有趣的數學問題, brute force method, 這是一個在所有的英文字母分別代表一個介於0到9的數字, 使到數字是可以不停地重複
其實我這是在溫習程式設計, 因為我過去本身有學過C/C++, 我是不想荒廢而已, 話時話, 最近我同所貼的問題是不是有一點深奧了一點??

TOP

請別介意!
1.  brute force 意指嘗試有系統地去從所有有機會成為解答的"答案",
     找出解答!  這本身不算是一個數學問題, 而是一種找解答的方法!
2.  "所有的英文字母分別代表一個介於0到9的數字, 使到數字是可以不停地重複"
     是什麼意思?  如果a代表0, b代表1, ..., j代表9, k代表0, ...
     這樣不就可以"使到數字是可以不停地重複"?!
     問題在於"問題有問題"!
3.  程式不能運行下去, 相信是編程邏輯, 用上太多continue.
     如能透過使用if-else去處理為清晰些!
IT代工/鎗手一名!
小弟並唔平, 但絕唔係貴!

TOP

引用:
原帖由 jayzhou_2046 於 2007-2-23 08:43 發表
請別介意!
1.  brute force 意指嘗試有系統地去從所有有機會成為解答的"答案",
     找出解答!  這本身不算是一個數學問題, 而是一種找解答的方法!
2.  "所有的英文字母分別代表一個介於0到9的 ...
我沒有介意
第一點我正是要表達此意!!
第二點真的不好意思, 是我打多了兩個"停地"字, 其實我想表達的是使到數字是可以不重複
第三點你的回應值得研究, 也許我看這本"深度學習C++"一書也許太過深奧!!

朋友, Thank you你

TOP

小弟瀏覽了有關的網頁,
感覺挺有趣!

若推"深奧", 小弟認為"The Art of Programming"是其中之一!

當年蓋茨先生如是說:
如果看明了頭一卷的話,
可以到微軟找工作!

值得一提的是:
利用編程去解答組合數學的問題,
小弟覺得不是一般商業機構會用上!

最後, 請恕小弟在各位大大面前班門弄斧,
要寫出較少錯誤的程式,
1. 有好的編程習慣, 模式, 風格,
    方便自己及他人閱讀.
2. 要懂得應用除錯功能.
    最起碼要用上printf (c), 或cout (c++)
    去把變數的內容

至於版主的第三個程式,
因中間有大量數字, 要偵錯不容易.

如果只是要把forty six用0 - 9不重複來代表,
大可不必用那麼多數字去找乘積及餘數.
可以利用一個像list的資料結構.
假設此list共存有0 - 9個數字.
每次隨機產生出來的0 - 9數字,
便從list中提取一個數字,
下一次隨機產生出來的0 - 8數字,
又再從list中提取一個數字.
那便不須要進行大量數字的運算了!

記著"簡單是美"這句說話.
IT代工/鎗手一名!
小弟並唔平, 但絕唔係貴!

TOP

多謝你的忠告!!

TOP

發新話題


重要聲明:本討論區是以即時上載留言的方式運作,本網站對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。本討論區有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。


Copyright 1997- Xocat. All Right Reserved.