我必須建立一個程序波紋管:成對的x,y驗證方程
- 用戶輸入3點的整數:A,B,C
- 用戶輸入一個整數n,然後n個整數(升序,和不同的數字)
- 如果驗證等式a x^2 + b y^2 = c,程序會檢查所輸入數字的所有可能對(x,y)(其中x!= y),並打印所有對驗證方程。
我做節目波紋管:
#include<iostream>
using namespace std;
int main() {
int a,b,c,n,i,j;
cin >> a;
cin >> b;
cin >> c;
cin >> n;
int num[n];
for(i=0;i<n;i++) {
cin >> num[i];
}
for (i=0;i<n;i++)
for (j=i+1;j<n;j++) {
if(a*num[i]*num[i]+b*num[j]*num[j] == c) {
cout << "(" << num[i] << "," << num[j] << ")";
}
if(a*num[j]*num[j]+b*num[i]*num[i] == c) {
cout << "(" << num[j] << "," << num[i] << ")";
}
}
return 0;
}
我把它通過 '爲' 語句O(nlogn)有兩個,但我知道它可以通過O(N)來完成。
請注意,我的程序正常工作,而且我不需要添加您在評論中所述的預期輸出和當前輸出。我只希望它是O(N)不是O(nlogn) - >我想要一個優化的代碼版本!
我該怎麼做?正在運行的程序的
示例: A = 1,B = 1,C = 20 則N = 5 然後n個數:2 3 4 9 18 程序將顯示所有對(X,Y),其驗證方程x^2 + y^2 = 20。在這種情況下,它顯示(2,4) 和(4,2)。
謝謝!
這些是整數嗎? – Amit
是的!這些數字是整數 –
然後只有+ -1滿足這個(* O(n)*) – Amit