和為S的兩個數字VS和為s的連續正數序列

2021-09-06 14:46:33 字數 1616 閱讀 6354

題目:輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。

例如輸入陣列1、2、4、7、11、15和數字15。由於4+11=15,因此輸出4和11。

思路整理一下:最初我們找到陣列的第乙個數字和最後乙個數字。首先定義兩個指標,第乙個指標指向陣列的第乙個(也就是最小的)數字,第二個指標指向陣列的最後乙個(也就是最大的)數字。當兩個數字的和大於輸入的數字時,把較大的數字往前移動;當兩個數字的和小於數字時,把較小的數字往後移動;當相等時,打完收工。這樣掃瞄的順序是從陣列的兩端向陣列的中間掃瞄。

bool findnumberswithsum(int data, int length, int sum, int *num1, int *num2)

else if(cursum > sum)

ahead--;

else

behind++;

}return found;

}

測試**:

#includeusing namespace std;

bool findnumberswithsum(int data, int length, int sum, int *num1, int *num2)

else if(cursum > sum)

ahead--;

else

behind++;

}return found;

}int main()

; int length = sizeof(data) / sizeof(int);

int num1, num2;

bool result = findnumberswithsum(data, length, 15, &num1, &num2);

if(result)

big++;

cursum += big;

}}void printcontinuoussequence(int small, int big)

擴充套件:

2023年中興面試題

程式設計求解:

輸入兩個整數 n 和 m,從數列1,2,3.......n 中 隨意取幾個數,使其和等於 m ,要求將其中所有的可能組合列出來。

#include#includeusing namespace std;  

listlist1;

void find_factor(int sum, int n)

list1.push_front(n); //典型的01揹包問題

find_factor(sum-n, n-1); //放n,n-1個數填滿sum-n

list1.pop_front();

find_factor(sum, n-1); //不放n,n-1個數填滿sum

}

int main()

和為s的兩個數字 VS 和為s的連續正數序列42

題目一 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。例如輸入陣列和數字15。由於4 11 15,因此輸出4和11。解題思路 先在陣列中選擇兩個數 第乙個數和最後乙個數 如果它們的和等於輸入的s,那麼就找到了數字。如果小於s...

和為s的兩個數字VS和為s的連續正數序列

問題一 題目 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好為s,如果有多對數字的和為s,輸出任意一對即可。例如 輸入陣列和數字15,輸出4和11。分析 1 最直觀的解法,時間複雜度為o n 2 兩個巢狀迴圈,固定乙個數字,然後再後面找另乙個數字,看是否和為s。2 更快的解...

和為S的兩個數字

題目描述 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸入 每個測試案例包括兩行 第一行包含乙個整數n和k,n表示陣列中的元素個數,k表示兩數之和。其中1 n 10 6,k為int 第二行包含n個整數,每個陣列均為i...