#include <iostream>
// 窮舉法
void sum_of_num(int ar[], int start, int len, int sum, int goal, int chec[], int tempindex)
{
static int found = 0;
for(int i = start; i<= len; i++)
{
//std::cout << ar[i] << " ";
sum+= ar[i];
if(sum > goal)
{
return ;
}
if(sum == goal)
{
//std::cout << " : found \n";
found = 1;
chec[tempindex] = ar[i];
for(int ind = 0; ind<= tempindex; ind++)
{
std::cout << chec[ind] << " ";
}
std::cout << "\n";
return ;
}
chec[tempindex] = ar[i];
sum_of_num(ar, i+1, len, sum, goal, chec, tempindex+1);
sum-=ar[i];
}
if(!found && !tempindex)
{
std::cout << -1 << "\n";
return;
}
}
int main()
{
int integer_num, temp, sumgoal;
while(std::cin >> integer_num >> sumgoal)
{
int arr[integer_num], check[] = {0},
size = sizeof(arr) / sizeof(arr[0]);
for(int ind = 0; ind< integer_num; ind++)
{
std::cin >> arr[ind];
}
for(int sort = 0; sort< integer_num - 1; sort++)
{
for(int forward = sort+1; forward< integer_num; forward++)
{
if(arr[sort] > arr[forward])
{
temp = arr[sort];
arr[sort] = arr[forward];
arr[forward] = temp;
}
}
}
sum_of_num(arr, 0, size-1, 0, sumgoal, check, 0);
}
return 0;
}
自己用測資跑似乎可以 但是線上測的結果為 stack smashed 我認為應該是錯在如果一組數字每一個加起來一定小於m 就回到index = 0 並印出 -1 不用繼續檢查 請高手幫忙謝謝
int arr[integer_num], check[] = {0},
自己用測資跑似乎可以 但是線上測的結果為 stack smashed 我認為應該是錯在如果一組數字每一個加起來一定小於m 就回到index = 0 並印出 -1 不用繼續檢查 請高手幫忙謝謝
我的電腦上也會stack smashing detected,你的check長度只有1?
int arr[integer_num], check[] = {0},
自己用測資跑似乎可以 但是線上測的結果為 stack smashed 我認為應該是錯在如果一組數字每一個加起來一定小於m 就回到index = 0 並印出 -1 不用繼續檢查 請高手幫忙謝謝
我的電腦上也會stack smashing detected,你的check長度只有1?
原來是陣列長度的問題 我把陣列長度設為integer_num 就不會有stack smashing detected 但是第二筆測資沒過
int arr[integer_num], check[] = {0},
自己用測資跑似乎可以 但是線上測的結果為 stack smashed 我認為應該是錯在如果一組數字每一個加起來一定小於m 就回到index = 0 並印出 -1 不用繼續檢查 請高手幫忙謝謝
我的電腦上也會stack smashing detected,你的check長度只有1?
原來是陣列長度的問題 我把陣列長度設為integer_num 就不會有stack smashing detected 但是第二筆測資沒過
您的答案為 : 10 90
正確答案為 : 10 40 50
int arr[integer_num], check[] = {0},
自己用測資跑似乎可以 但是線上測的結果為 stack smashed 我認為應該是錯在如果一組數字每一個加起來一定小於m 就回到index = 0 並印出 -1 不用繼續檢查 請高手幫忙謝謝
我的電腦上也會stack smashing detected,你的check長度只有1?
原來是陣列長度的問題 我把陣列長度設為integer_num 就不會有stack smashing detected 但是第二筆測資沒過
您的答案為 : 10 90正確答案為 : 10 40 50
題目應該是一直呼叫函數直到 和 等於 m 接者return 回前一個元素 繼續下一輪迴圈
重複這個流程 應該是會先輸出 和 等於 m 且 比較小的數字
以n = 4, m = 100 10 40 50 90 來說
應該先輸出
10 40 50
再輸出
10 90 但是第二筆測資好像倒過來
您的答案為 : 10 90正確答案為 : 10 40 50
題目應該是一直呼叫函數直到 和 等於 m 接者return 回前一個元素 繼續下一輪迴圈重複這個流程 應該是會先輸出 和 等於 m 且 比較小的數字
以n = 4, m = 100 10 40 50 90 來說
應該先輸出
10 40 50
再輸出
10 90 但是第二筆測資好像倒過來
翻了一下解題記錄,發現我之前也跟你錯同樣的地方...
原因在於那些整數可能會重複,這時候輸出的次數就要增加,例如測資是
5 100
10 40 50 50 90
10 40 50就要輸出兩次
您的答案為 : 10 90正確答案為 : 10 40 50
題目應該是一直呼叫函數直到 和 等於 m 接者return 回前一個元素 繼續下一輪迴圈重複這個流程 應該是會先輸出 和 等於 m 且 比較小的數字
以n = 4, m = 100 10 40 50 90 來說
應該先輸出
10 40 50
再輸出
10 90 但是第二筆測資好像倒過來
翻了一下解題記錄,發現我之前也跟你錯同樣的地方...原因在於那些整數可能會重複,這時候輸出的次數就要增加,例如測資是
5 100
10 40 50 50 9010 40 50就要輸出兩次
謝謝提醒 終於ok了