線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1235
推到 Plurk!
推到 Facebook!

請問一個在C++中生成集合與運算的問題

答題得分者是:poaivy
Chengyan
一般會員


發表:5
回覆:8
積分:2
註冊:2007-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-13 12:29:07 IP:59.124.xxx.xxx 訂閱
是這樣的,我有一個程式想要使用者輸入一個數字,然後生成數字內每一個數字為一集合,然後將所對應的集合作加總

當此加總數字等於所輸入的數字的時候,我將他Print出,而目前我的寫法如下:

這是我加總的區段

[code cpp]
int value[20] ;
int temp[20];
void setsum(int sum, int input, int num, int move)
{
if(sum == input)
{
printf("(%d",temp[0]);
for(int i = 1; i printf(",%d",temp[i]);
printf(")\n");
return;
}
for(int i = move; i < input; i)<br /> {
if(sum value[i] <= input)
{
temp[num ] = value[i];
setsum(sum value[i],input,num,i 1);
num--;
}
}
}

[/code]

而這段是我生成集合的區段


[code cpp]
void buildset(int input)
{
for(int i=0;i <= input;i )
{
value[0]=1;
value[i 1]=value[i] 1;
}
return;
}

[/code]

以下是我想執行的區段

[code cpp]
int input;
printf("輸入集合個數:");
scanf("%d", &input);
buildset(input);
setsum(0,input,0,0)
[/code]

執行結果假若輸入值為10
結果是

(1,2,3,4)
(1,2,7)
(1,3,6)
(1,4,5)
(1,9)
(2,3,5)
(2,8)
(3,7)
(4,6)
(10)

但是,我想要出現的是每一個集合中的數字都有出現而不是每一個位置只出現一次

所以我有嘗試在生成集合中加上一個迴圈,不過,他會造成加總後顯示的數值重複

那如果我想要有生成的數值中有

(1,1,1,1,1,1,1,1,1,1)

或是(6,4),(5,3,2),(4,3,2,1)而且不重複的話

我該如何做呢?
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-14 09:22:11 IP:192.192.xxx.xxx 訂閱
嘗試用遞迴的方式 去寫看看吧^^
Chengyan
一般會員


發表:5
回覆:8
積分:2
註冊:2007-03-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-15 09:19:55 IP:59.124.xxx.xxx 訂閱
謝謝poaivy大哥的回覆~

不過小弟還是有點不明白.......如果是遞迴...那我SETSUM那個函式的寫法就是遞迴的寫法了

還是你說的是生成集合的方式呢?

這部份或許我需要再想一想,感謝你的回覆唷~
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-05-16 16:13:45 IP:192.192.xxx.xxx 訂閱
^^  其實你貼的程式碼已經有答案了

只要將 for(int i = move; i < input; i) <br />改為 for(int i = 0; i < input; i)<br />

即可
:P


Chengyan
一般會員


發表:5
回覆:8
積分:2
註冊:2007-03-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-05-17 19:48:07 IP:59.124.xxx.xxx 訂閱
謝謝poaivy大哥~這樣作確實可以了~
看來我確實功力不足呀~
感謝您細心的指導唷~
系統時間:2024-04-20 14:58:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!