題目:輸入乙個遞增排序的陣列和乙個數字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...