PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   會c++的大大幫個忙...... (https://www.pcdvd.com.tw/showthread.php?t=261232)

以月為影 2003-10-24 12:52 AM

回覆: 回覆: 回覆: 會c++的大大幫個忙......
 
引用:
Originally posted by asdf77885511
指標加迴圈加switch可以寫得出來.............
另外也可以不用指標用除的就可以將商數和餘數分離的方式也可以..........
六位數除100000~~~得到的商就是第六位數~~~
六位數除10000~~~~得到的商就是第五位數~~~依次類推.........
用除法外加迴圈加switch也可以寫得出來................
這個程式我覺得應該不會超過三十行...........


功力不夠....寫了80行...

asdf77885511 2003-10-24 12:56 AM

回覆: 回覆: 回覆: 會c++的大大幫個忙......
 
引用:
Originally posted by asdf77885511
指標加迴圈加switch可以寫得出來.............
另外也可以不用指標用除的就可以將商數和餘數分離的方式也可以..........
六位數除100000~~~得到的商就是第六位數~~~
六位數除10000~~~~得到的商就是第五位數~~~依次類推.........
用除法外加迴圈加switch也可以寫得出來................
這個程式我覺得應該不會超過三十行...........

說錯了..........
假設六位數變數是i
i除10~~~~得到的商設為j~~~~而餘數為第一位數的0-9
j除10~~~~得到的商設為x~~~而餘數為第二位數的0-9
...........依此類推
而使用迴圈每次皆除以10再配合switch迴圈執行六次就可以做出來了

asdf77885511 2003-10-24 01:03 AM

回覆: 回覆: 回覆: 回覆: 會c++的大大幫個忙......
 
引用:
Originally posted by 以月為影
功力不夠....寫了80行...

不會丫
我寫應該也差不多吧.......
只是行的算法不一樣吧.........
不曉得可不可以邊輸入邊判斷......
我覺得她們老師的用意是要讓她們有資料演算判斷的能力吧...........

shukae 2003-10-24 01:05 AM

就算用 basic
也可輕鬆寫出來, 25 列搞定....
要不是真實模式有單一節區64k大小限制
不然一次產生10萬組也不是問題
本來想用Perl寫, 不過 QB 大家應該比較容易看懂意思
直接轉成 C 也應該比較方便吧 :D


DECLARE FUNCTION rand! (start!, ends!) ' 自訂函數
DIM ss$(1 TO 1000) ' 宣告 1 ~ 1000 的字串陣列
DIM num(0 TO 9) ' 宣告 0 ~ 9 的數字陣列

' 產生一大群長度介於 1~50 的數字字串組 (不固定長度)
' 產生組數大於1小於1000 (不固定組數)
FOR a = 1 TO rand(1, 1000)
FOR b = 1 TO rand(1, 50)
ss$(a) = ss$(a) + CHR$(rand(48, 57))
NEXT
NEXT

' 開始計算每組數字與其中數字出現的次數
FOR a1 = 1 TO a - 1
FOR b1 = 1 TO LEN(ss$(a1))
x = ASC(MID$(ss$(a1), b1, 1)) - 48 ' 把字串的數字轉成ASCII碼
num(x) = num(x) + 1 ' 再減 48 就會取得 "值"
NEXT ' 用這個 "值" 當成陣列的索引, 直接 +1
NEXT ' 如此就可以達到統計出現次數的目的

' 輸出結果
FOR z = 0 TO 9
PRINT z; "總共出現: "; num(z); "次"
NEXT

' 自定函數
FUNCTION rand (start, ends) ' 設定起迄數字
RANDOMIZE TIMER ' 設定亂數種子
rand = INT(RND * (ends - start + 1)) + start ' 產生亂數
END FUNCTION

LucasY 2003-10-24 01:06 AM

回覆: 回覆: 回覆: 回覆: 會c++的大大幫個忙......
 
引用:
Originally posted by asdf77885511
說錯了..........
假設六位數變數是i
i除10~~~~得到的商設為j~~~~而餘數為第一位數的0-9
j除10~~~~得到的商設為x~~~而餘數為第二位數的0-9
...........依此類推
而使用迴圈每次皆除以10再配合switch迴圈執行六次就可以做出來了

我是覺得他們老師說六位整數還不如讓他用字元陣列寫算了,新手剛近來要他處理那些C/C++的指標,我看大概會暴掉吧
我有的教授老說C/C++的指標其實是壞習慣,可是用的好高興啊:like:,只要bug不是出現在指標的話:fear:

銀色三冠王IS 2003-10-24 01:12 AM

回覆: 回覆: 會c++的大大幫個忙......
 
引用:
Originally posted by shukae
等一下我寫一段給你看
完全不需要使用 Switch 或類似的語法
用陣列與迴圈做做得到了 ^^

剛剛想到以前用過陣列的方法..
配合asdf77885511提到的做法..

基本上一開始宣告的還是差不多,但原本用來計次數的10個變數count_1 ..~ _10
改成用陣列宣告 int count[10]; //大小為10,實際指標為數字0~9 //

原輸入數值除以10 ,餘數為 x , 則陣列 count[x]+=1; (餘數範圍一定在0~9)
得的商繼續除以10 ,餘數為 x , 則陣列 count[x]+=1;
迴圈總共作六次,就可以從陣列count[] 中得到每個數字出現過的次數.
這樣真的不需要30行..也不需要用到switch.

不過大家還是幫原作者想想C語言switch解決這題目的方式吧..
畢竟先交出老師要求的方式比較重要..:)

shukae 2003-10-24 01:19 AM

回覆: 回覆: 回覆: 會c++的大大幫個忙......
 
引用:
Originally posted by 銀色三冠王IS
剛剛想到以前用過陣列的方法..
配合asdf77885511提到的做法..

基本上一開始宣告的還是差不多,但原本用來計次數的10個變數count_1 ..~ _10
改成用陣列宣告 int count[10]; //大小為10,實際指標為數字0~9 //

原輸入數值除以10 ,餘數為 x , 則陣列 count[x]+=1; (餘數範圍一定在0~9)
得的商繼續除以10 ,餘數為 x , 則陣列 count[x]+=1;
迴圈總共作六次,就可以從陣列count[] 中得到每個數字出現過的次數.
這樣真的不需要30行..也不需要用到switch.

不過大家還是幫原作者想想C語言switch解決這題目的方式吧..
畢竟先交出老師要求的方式比較重要..:)


我上面貼的 QB 程式, 若換成 Perl 程式, 甚至可以壓縮到20列以內
若以 Switch 也可以配合長整數陣列, 而不要宣告很多個長整數
這樣就會使程式很有彈性, 而且易於修改 :) :)
不過這種Switch語法.... Perl 寫不出來.... Perl 沒有這種語法.....(至少我沒看過)
ps. 我不會 C++ =.=, 目前正努力學習 Gtk2-Perl 中

用除法求餘數雖然可以, 但數值若很長
給你50位數, 馬上死在路邊 :D

shukae 2003-10-24 01:24 AM

回覆: 回覆: 回覆: 回覆: 會c++的大大幫個忙......
 
---刪---

asdf77885511 2003-10-24 01:29 AM

回覆: 回覆: 回覆: 回覆: 會c++的大大幫個忙......
 
引用:
Originally posted by shukae
我上面貼的 QB 程式, 若換成 Perl 程式, 甚至可以壓縮到20列以內
若以 Switch 也可以配合長整數陣列, 而不要宣告很多個長整數
這樣就會使程式很有彈性, 而且易於修改 :) :)
不過這種Switch語法.... Perl 寫不出來.... Perl 沒有這種語法.....(至少我沒看過)
ps. 我不會 C++ =.=, 目前正努力學習 Gtk2-Perl 中

用除法求餘數雖然可以, 但數值若很長
給你50位數, 馬上死在路邊 :D

做迴圈就好了丫...........跟位數長不長沒有關係............

shukae 2003-10-24 01:38 AM

回覆: 回覆: 回覆: 回覆: 回覆: 會c++的大大幫個忙......
 
引用:
Originally posted by asdf77885511
做迴圈就好了丫...........跟位數長不長沒有關係............


嗯..... 我的意思是說, 因為 C 語言有變數型態的定義
我不曉得C語言能定義的整數數值能有多大啦~~~ :confused:
但不論如何都有位數的極限, 數值處理的位數長度會受限制
所以若以接受數值輸入的方法, 最好採用字串變數
用字串變數與ASCII碼之間的對應關係來做
才不會產生溢位的問題 :D


所有的時間均為GMT +8。 現在的時間是08:28 AM.

vBulletin Version 3.0.1
powered_by_vbulletin 2026。