2016-10-07 5 views
-2

나는 C++ 알고리즘 문제를 해결하고 있으며 왜 내가 옳은 대답을 얻지 못하는지 모르겠다. 문제는 다음과 같이 구성됩니다. n 개의 숫자 행이 있습니다. 합계 4 또는 1을 얻을 때까지 각 숫자를 가져 와서 자릿수의 제곱을 추가해야합니다. 그런 다음 몇 번이나 그 번호를 추가했는지 인쇄해야합니다. 그의 예는 다음과 같습니다. 89와 64 + 81 = 145, (1) 1 + 16 + 25 = 42, (2) 16 + 4 = 20, (3) 4 + 0 = 4; (4) 그리고 우리는 4이기 때문에 멈 춥니 다. 4를 더했기 때문에 4를 더해야하기 때문에 4를 인쇄 할 필요가 있습니다. 68과 동일합니다. 내 코드는 C++입니다. 그러나 파일에 사용합니다. c.행복한 전화 번호와 비슷한 작업

#include<stdio.h> 
#include<math.h> 

FILE *f,*g; 
int n,i,a[500],sqr,nr; 
int main() 
{ 
    f = fopen("unupatru.in","r"); 
    fscanf(f,"%d\n",&n); 
    for(i=1;i<=n;i++)fscanf(f,"%d",&a[i]); 
    fclose(f); 
    for(i=1;i<=n;i++) 
    { 
    nr=0; 
    sqr=0; 
    while(sqr!=4 || sqr !=1) 
    { 
     while(a[i]) 
     { 
     sqr+=pow(a[i]%10,2); 
     a[i]/=10; 
     } 
     a[i]=sqr; 
     nr++; 
    } 
    g=fopen("unupatru.out", "w"); 
    fprintf(g,"%d\n",nr); 
    fclose(g); 
    } 
    return 0; 
} 

나에게 도와주세요 내 코드의 문제는 내가 실행을 클릭하고 실행을 중지하지 않습니다를 컴파일 할 때

에게 당신을

+0

당신 잘못된 헤더를 사용하고; 예. ''. – MSalters

+0

C++을 사용하는 경우 C 함수 호출을 먼저 제거하십시오 – wasthishelpful

+0

sugestions을 주셔서 감사합니다. 그러나이 문제는이 문제가 아니며 일주일 동안 문제를 해결해 왔지만 문제가되지 않았습니다. 코드의 논리와 무언가가 그것을 알려 주시기 바랍니다, 그것을 해결하는 방법을 더 말해, 코드는 C와 비슷합니다 –

답변

1

확실하지가 충분히 도움이되지만 ...하시기 바랍니다 것입니다 (이고르 Tandetnik에 의해 지적) && 대신 ||

더 좋은 방법을 사용하여 테스트를 수정 외부 동안 내부도 sqr = 0을 넣어해야합니다 당신은,821을 사용 shuold (단 내부 sqr=0와)/while

do 
{ 
    sqr=0; 
    while(a[i]) 
    { 
    sqr+=pow(a[i]%10,2); 
    a[i]/=10; 
    } 
    a[i]=sqr; 
    nr++; 
} 
while(sqr!=4 && sqr !=1) 
+0

시도해 주셔서 감사합니다. –

+0

문제를 해결해 주셔서 감사합니다.하지만 답글을 쓸 수 없습니다. –

+0

@MelinVen - 죄송합니다. 제 말은 : ** sqrt = 0을 ** sqr = 0을 외부에 유지하면서 추가해야합니다. 어쩌면'할 '/'하는 동안'이 더 낫다. – max66

0
#include<iostream> 
#include<cmath> 
#include<fstream> 
using namespace std; 
FILE *f,*g; 
int n,i,a[500],sqr,nr,b[500]; 
int main() 
{ 
    f = fopen("unupatru.in","r"); 
    fscanf(f,"%d\n",&n); 
    for(i=1;i<=n;i++)fscanf(f,"%d",&a[i]); 
    fclose(f); 
    for(i=1;i<=n;i++) 
    { 
     nr=0; 
     sqr=0; 
     while(sqr!=4 && sqr !=1) 
     { 
      sqr=0; 
      while(a[i]) 
      { 
       sqr+=pow(a[i]%10,2); 
       a[i]/=10; 
      } 
       a[i]=sqr; 
       nr++; 
       b[i]=nr; 
     } 
    } 

     g=fopen("unupatru.out", "w"); 
     for(i=1;i<=n;i++) 
     fprintf(g,"%d ",b[i]); 
     fclose(g); 
    return 0; 

}

관련 문제