花之慶次 2007-2-20 13:43
	以下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;
}
[[i] 本帖最後由 花之慶次 於 2007-2-20 13:53 編輯 [/i]]
 
	jayzhou_2046 2007-2-21 11:34
	是一個隨機産生10個由0至9的數字的程式!
沒問題啊!
用borland bcc55 free command line tool編譯後,
運行順利, 感覺良好!
 
	花之慶次 2007-2-21 22:04
	好, 多謝你!!!
:):):):):)
 
	花之慶次 2007-2-22 09:50
	留意紅字部份:
#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;
           [color=Red]<< setw(10) << a * b << endl; [/color]     
      system("pause");
      return 0;
}                               
       
在紅字部份中所明確指出的是parse, 下一步我應該如何改正呢??
 
	花之慶次 2007-2-22 10:22
	還有這個程式, 嚴格上應該沒有問題, 但不知何故不能執行:
#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;
       
}
 
	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.
小弟想請問一下此程式是用來幹什麼的?
 
	cutymelon 2007-2-22 21:14
	小弟我看不懂
duibuqi
 
	花之慶次 2007-2-22 22:58
	[quote]原帖由 [i]jayzhou_2046[/i] 於 2007-2-22 11:46 發表
小弟相信是
if (S==F||S==0||S==R||S==T||S==Y||S==E||S==N) continue;
此句讓程式永遠回到for-loop的開頭,
沒法執行下面的statements.
小弟想請問一下此程式是用來幹什麼的? [/quote]
這是一個有趣的數學問題, brute force method, 這是一個在所有的英文字母分別代表一個介於0到9的數字, 使到數字是可以不停地重複
其實我這是在溫習程式設計, 因為我過去本身有學過C/C++, 我是不想荒廢而已, 話時話, 最近我同所貼的問題是不是有一點深奧了一點??
 
	jayzhou_2046 2007-2-23 08:43
	請別介意!
1.  brute force 意指嘗試有系統地去從所有有機會成為解答的"答案",
     找出解答!  這本身不算是一個數學問題, 而是一種找解答的方法!
2.  "所有的英文字母分別代表一個介於0到9的數字, 使到數字是可以不停地重複"
     是什麼意思?  如果a代表0, b代表1, ..., j代表9, k代表0, ...
     這樣不就可以"使到數字是可以不停地重複"?!
     問題在於"問題有問題"!
3.  程式不能運行下去, 相信是編程邏輯, 用上太多continue.
     如能透過使用if-else去處理為清晰些!
 
	花之慶次 2007-2-23 09:58
	[quote]原帖由 [i]jayzhou_2046[/i] 於 2007-2-23 08:43 發表
請別介意!
1.  brute force 意指嘗試有系統地去從所有有機會成為解答的"答案",
     找出解答!  這本身不算是一個數學問題, 而是一種找解答的方法!
2.  "所有的英文字母分別代表一個介於0到9的 ... [/quote]
我沒有介意
第一點我正是要表達此意!!:applause::applause:
第二點真的不好意思, 是我打多了兩個"停地"字, 其實我想表達的是使到數字是可以不重複:L:L
第三點你的回應值得研究, 也許我看這本"深度學習C++"一書也許太過深奧!!:L:L
朋友, Thank you你
:bow::bow::bow::bow::bow::givemefive::jump:
 
	jayzhou_2046 2007-2-23 11:06
	小弟瀏覽了有關的網頁,
感覺挺有趣!
若推"深奧", 小弟認為"The Art of Programming"是其中之一!
當年蓋茨先生如是說:
如果看明了頭一卷的話,
可以到微軟找工作!
值得一提的是:
利用編程去解答組合數學的問題,
小弟覺得不是一般商業機構會用上!
最後, 請恕小弟在各位大大面前班門弄斧,
要寫出較少錯誤的程式,
1. 有好的編程習慣, 模式, 風格,
    方便自己及他人閱讀.
2. 要懂得應用除錯功能.
    最起碼要用上printf (c), 或cout (c++)
    去把變數的內容
至於版主的第三個程式,
因中間有大量數字, 要偵錯不容易.
如果只是要把forty six用0 - 9不重複來代表,
大可不必用那麼多數字去找乘積及餘數.
可以利用一個像list的資料結構.
假設此list共存有0 - 9個數字.
每次隨機產生出來的0 - 9數字,
便從list中提取一個數字,
下一次隨機產生出來的0 - 8數字,
又再從list中提取一個數字.
那便不須要進行大量數字的運算了!
記著"簡單是美"這句說話.
 
	花之慶次 2007-2-23 19:06
	多謝你的忠告!!:bow::bow::bow::bow::bow:
 
頁: 
[1]