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次...