2016-07-11 48 views
-2

我必須建立一個程序波紋管:成對的x,y驗證方程

  1. 用戶輸入3點的整數:A,B,C
  2. 用戶輸入一個整數n,然後n個整數(升序,和不同的數字)
  3. 如果驗證等式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)。

謝謝!

+2

這些是整數嗎? – Amit

+0

是的!這些數字是整數 –

+2

然後只有+ -1滿足這個(* O(n)*) – Amit

回答

1

假設0基於指數...

Set i=0 
Set j=n-1 
While i<n or j>=0 
    Set sum=a(num[i]^2)+b(num[j^2) 
    If sum==c then found pair, and increase i 
    If sum<c increase i 
    If sum>c decrease j 
0

我發現正是這個問題解決了這裏:http://lonews.ro/educatie-cultura/22899-rezolvare-admitere-universitatea-bucuresti-2015-pregatire-informatica.html和修改一下,以顯示對(它最初顯示的對數)。

#include <iostream> 
using namespace std; 

int main() 
{ 
    int a, b, c, n, i=0; 
    cout << "a = "; 
    cin >> a; 
    cout << "b = "; 
    cin >> b; 
    cout << "c = "; 
    cin >> c; 
    cout << "n = "; 
    cin >> n; 

    int s[n]; 
    for(i=0; i<n; i++) { 
     cout << "s[" << i+1 << "] = "; 
     cin >> s[i]; 
    } 
    int j=n-1; 
    i = 0; 
    while(j>=0 || i<n) { 
     if(a*s[i]*s[i] + b*s[j]*s[j] == c) { 
      cout << "(" << s[i] << "," << s[j] << ") "; 
      i++; 
     } 
     if(a*s[i]*s[i] + b*s[j]*s[j] < c) { 
      i++; 
     } 
     if(a*s[i]*s[i] + b*s[j]*s[j] > c) { 
      j--; 
     } 
    } 
    return 0; 
} 
相關問題