2012-03-29 2 views
0

나는이 특정 코드를 C++로 작성하여 while 루프를 사용하고 정수 배열에 저장하여 정수 3 & 5의 모든 배수를 찾으려고했습니다. 또한 각 배수를 인쇄하고 싶습니다. 하지만이 프로그램을 디버깅 할 때마다 끝없이 '0'이 인쇄됩니다. 나는 이해하지 못한다. 누군가이 코드를 수정하는 방법과 그 비정상적인 결과가 나타나는 이유를 설명해 주시겠습니까?정수 배수 빠르게 찾기

#include <iostream> 
using namespace std; 

int main() 
{ 
    const int three_limit = 334; 
    const int five_limit = 200; 
    int threeArray[three_limit] = {0}; 
    int fiveArray[five_limit] = {0}; 
    int i = 1, j = 1; 
    while (i < three_limit) 
    { 
     int multiples = 3*i; 
     multiples = threeArray[i - 1]; 
     cout << threeArray[i - 1] << endl; 
     i++; 
    } 
    while (j < five_limit) 
    { 
     int multiples = 5*i; 
     multiples = fiveArray[j - 1]; 
     cout << fiveArray[j - 1] << endl; 
     j++; 
    } 
    char response; 
    cin >> response; 
    return 0; 
} 
+2

'='연산자의 순서를 확인하십시오. –

+0

'multiples = threeArray [i - 1];'및'multiples = fiveArray [j - 1];'에서 당신은 분명히 왼쪽에서 오른쪽으로 할당하려고합니다. 할당은 오른쪽에서 왼쪽으로 진행됩니다. 또한이 질문을 숙제로 표시하십시오. –

답변

1

수는 3, 5, 예를 들어,의 배수가 포함 된 경우 중복이있을 것이다 귀하의 출력 15, 30.

제안 중 일부는 매우 느린 곱셈 또는 mod (%)를 사용하지만 중복 문제를 피하는 데 도움이되는 바이너리 배열을 사용하는 훨씬 빠른 해결책이 있습니다. 다음과 같이하십시오 :

int main() { 
    bool nums[1001]; 
    for(int i = 1; i < 1001; ++i) 
     nums[i] = 0; 

    for(int i = 3; i < 1001; i += 3) 
     nums[i] = 1; 
    for(int i = 5; i < 1001; i += 5) 
     nums[i] = 1; 

    for(int i = 1; i < 1001; ++i) 
     if(nums[i]) 
      cout << i << endl; 
} 
+0

와우! Mike T. 정보에 감사드립니다. –

0

나는이

multiples = threeArray[i - 1]; 

정말

threeArray[i - 1] = multiples; 

다시 디버깅을 시도하고이 줄을 실행하는 동안 multiples를 볼 수 있어야 같아요.

+0

와우, 각각 1 초 차이로 3 답변 ... – vsz

0
multiples = threeArray[i - 1]; 

로컬 int를 배열의 (빈) 내용으로 덮어 쓰는 중입니다. 할당이 잘못되었습니다.

1

그것은 당신이 당신의 배열의 값을 수정하지

threeArray[i - 1] = multiples; 

대신

multiples = threeArray[i - 1]; 
0

해야한다. 그 결과는 아래와 같습니다 :

while (i < three_limit) 
    { 
     int multiples = 3*i; 
     threeArray[i-1] = multiples; 
     cout << threeArray[i - 1] << endl; 
     i++; 
    } 
1

이의 배수를 생성하기 위해, 다음 코드를 참조하십시오 5

#include<stdio.h> 

int main(){ 
int max=1000; 
int i=1,result=0; 



while(result!=max && i!=200) 
{ 
    result=5*i;     // change the 5 by 3 for multiples of 3 
    printf("\n %d",result); 
    i++; 

}  

} 
+0

i 변수가 귀하의 경우에 리미터입니다! – shridatt