2016-10-15 2 views
1

이 문제에 대한 도움이 필요합니다. 하루 종일 해결하려고 노력하고 있지만 해결책을 찾을 수 없습니다. 내가 사과 그래서, 나는에만 사용하도록 허용하고 그러나 바보 같은 질문 경우 그냥 C를 공부를 시작 :숫자가 C의 두 사각형의 합계인지 확인하십시오

  • if
  • for
  • do-while
  • while

문제를 해결하는 진술.

주어진 수를 2 개의 정사각형의 합으로 쓸 수 있는지 확인해야하는데이 두 정사각형이 어느 것인지 알 필요가 없으며 숫자가 0 일 경우 분석 할 필요가 없습니다. 내가 지금까지 구축 관리했습니다 무엇 1.은 다음과 같습니다

unsigned int x; 
unsigned int q = 1; 
printf("Enter a number : \n"); 
scanf("%u", &x); 
unsigned int j = sqrt(x - (q*q)); 
if (x != 1 && x != 0) 
    for (q; (q*q) <= (x/2); q++) 
     if ((x - (q*q)) == (j*j)) 
printf("Given number is sum of two squares"); 
이 하나가 때로는 때로는 작동하고

하지 않습니다, 그것은 65 (8^2+1^2)90 (9^2+3^2)에 대한 작업을 수행하지만 181 (10^2+9^2)을 넣을 때 작동하지 않을 것입니다 예를 들어 및 so on ... 이 문제를 어떻게 해결할 수 있는지 알고 있습니까?

+0

그래서'return = '또는'a = b;'와 같은 표현식이 없습니까? 죄송합니다. 불가능합니다. 귀하의 코드는 이미 제약 조건을 위반합니다. – Olaf

+0

죄송합니다. 실수로, a = b, – Tsurupeta

+0

과 같은 표현을 사용할 수 있습니다. 예, 분명합니다. 'while'등과 같이 작동하지 않습니다. 하지만 _expression-statements_도 사용할 수 있습니까? – Olaf

답변

2

좋아, 그래서 여기 의사 가능한 해결하기위한 코드이다 . C이 변환

, 다음과 같아야합니다

unsigned int x; 
unsigned int a; 
unsigned int b; 

printf("Enter a number : \n"); 
scanf("%u", &x); 

for(a=0; a<=x; a++){ 
    for(b=a; b<=x; b++){ 
     if((a*a + b*b) == x){ 
     printf("Given number is sum of two squares"); 
     } 
    } 
} 

내가 잘하면 어떤 불쾌한 오류가없는, C에서 녹슨 조금입니다.

+0

답장을 보내 주셔서 감사합니다. 컴파일하려고했지만 주어진 숫자만큼 숫자가 "주어진 숫자"인 것처럼 보입니다. – Tsurupeta

+1

'sqrt (a)'는'a'의 제곱이 아니라'a'의 제곱근을 계산합니다 . 그리고 분명히 모든 자연수는 두 개의 제곱근의 합입니다. – chtz

+0

@chtz, 네가 맞아, 내 실수 야, 고마워. Tsurupeta, 나는 당신이 두 번째 시도를주고 싶다면 내 대답을 업데이트했습니다. –

1

for 루프 안에 j의 계산을 넣어야합니다. 현재 q=1에 대해서만 j을 계산합니다.

루프 블록과 if을 중괄호에 넣는 것이 좋습니다. b 번 이상 사각형 동일한 액수를 확인 피할 a의 값이 할당되고, 중첩 루프

Input x; 

int a; 
int b; 

for(a=0; a <= x; a++){ 

    for(b=a; b <= x; b++){ 

     if((a*a + b*b) == x){ 
     Output is_solution; 
     } 

    } 

} 

: 즉,

if(condition) 
{ 
    // statements 
} 
+0

안녕하세요, 답변 해 주셔서 감사합니다. – Tsurupeta

+0

하지만 q = 1에 대해서 J만을 계산하면 프로그램이 90 (9^2 + 3^2)을 어떻게 찾을 수 있습니까? – Tsurupeta

+0

'x = 90'의 경우'sqrt (90-1) = 9.48 ....'을 계산합니다.'int'로 저장할 때 9로 반올림됩니다. – chtz

관련 문제