子集和問題的例項為S,t。其中,Sx1,x

時間 2021-08-30 10:21:17

1樓:樂觀的l無謂

給定n 個整數的集合x=和一個正整數y,編寫一個回溯演算法,在x中尋找子集yi,使得yi中元素之和等於y。

#include #include

int len; // 輸入長度.

int sum; // 和.

int *data; // 資料.

char *output; // 所求子集元素,與輸入資料對應,'y'為取.

// 獲取輸入.

void getinput(){

int i;

printf("輸入集合個數: ");

scanf("%d", &len);

while(len <= 0){

printf("集合個數必須大於0: ");

scanf("%d", &len);

data = new int[len];

output = new char[len];

for(i = 0; i < len; i++){printf("輸入第%d個數: ", i+1);

scanf("%d", &data[i]);

output[i] = 'n';

printf("輸入子集和: ");

scanf("%d", &sum);

while(sum <= 0){

printf("子集和必須大於0: ");

scanf("%d", &len);

// 回朔求解:有解返回非0值,無解返回0.

int getres(){

int p = 0; // 指向當前值.

int temp = 0; // 當前子集合和.

while(p >= 0){

if('n' == output[p]){// 選中當前項.

output[p] = 'y';

temp += data[p];

if(temp == sum){

return 1;

else if(temp > sum){

output[p] = 'n';

temp -= data[p];

p++;

if(p >= len){

// 開始回朔.

while('y' == output[p-1]){p--;

output[p] = 'n';

temp -= data[p];

if(p < 1){

return 0;

while('n' == output[p-1]){p--;

if(p < 1){

return 0;

output[p-1] = 'n';

temp -= data[p-1];

return 0;

// 列印結果.

void printres(){

int i;

printf("\r\n所求子集為: ");

for(i = 0; i < len; i++){if('y' == output[i]){printf("%d ", data[i]);

void main(){

getinput();

if(getres()){

printres();

else{

printf("無解!");

printf("\r\npress any key to continue.");

getch();

2樓:5555起名好難啊

對於給定的正整數的集合s=和正整數c,計算s 的一個子集s1,使得s1中元素和為c

3樓:匿名使用者

集合是集合,整數是整數,兩碼事。

請為我翻譯這段英文,並回答其中的問題!有積分獎勵哦

一個老男人帶著一頭老虎 一隻山羊還有一些蕪菁根在趕路。他來到一條小河的河邊,他想要過河。他找到條小船。但船太小,不能一次帶著老虎 山羊 蕪菁根過河。每次過河只能帶著三種中的一種到河的對岸。假如留著老虎和山羊,老虎將吃掉蕪菁根。他沒有主意。你有辦法嗎?先讓蕪菁根和老虎過河,然後讓蕪菁根坐船回來,然後讓...

高達seed D的問題,關於高達Seed和SeedD的問題

強襲 紅不是奧布造的。只有拂曉才是奧布造的。關於高達seed和seedd的問題 我記得月球基地也是地球軍的,地球軍有大西洋聯盟,奧布是中立國,後來來了個尤拉,就是自稱卡卡的未婚夫 逼奧布加入大西洋聯盟,然後卡卡又乘拂曉回去了。卡卡堅持奧布的信念,還是中立。在seed裡大天使號屬於地球軍,在seed ...

設等比數列an的前n項和為Sn,如果S3 S6 2S9,求數列公比q?過程!謝謝

sn a1 1 q n 1 q 根據題意,1 q 3 1 q 6 2 1 q 9 化簡得到q 3 q 6 2q 9 推出1 q 3 2q 6,q 3 1 舍 或q 3 1 2 當q 1 sn na1 3a1 6a1 2 9a1 左邊 9,右邊 18 不符,舍 綜上所述q 3 1 2 q 1 2 3次...