1~100사이의 홀수와 짝수를 구하고, 1번 홀수, 1번 짝수의 합...n번 홀수, n번 짝수의 합을 구하라.
-> 배열 할 줄 몰라서 숙제 바뀜.
1~100 사이에 있는 소수 구하기
소수 : 1과 자기 자신 외에는 나누어지지 않는 수.
로 숙제가 바뀜.
나의 답 :
for(int i=2 ; i<=100 ; i++)
{ for (int d=1 ; d<=i ; d++)
if (i%d == 0)
이 한계. 변수랑 문법은 배웠는데 출력 하는거를 모름.
선생님 답 :
for(int i = 1; i <= 100; i++) // 1부터 시작이라고 했으니 i=1
{
bool check = false; // 초기화. 소수가 맞다라고 기본 전제를 깔아 둠.
for(int j = 1; j < i; j++) // i가 1일때, j는 0인데 j는 1부터 시작이므로, i가 0일때는 나누어 지지 않음.
{
if(i%j == 0) // 만일, i 나누기 j의 나머지가 0과 같다면,
{
if(j != 1 && j != i) // 만일 j가 1과 다르고 또한 i와도 다르다. 라면
{
check = true; // 그것은 소수가 아니므로 반복을 종료한다.
break;
// 나누어 떨어지기는 했지만, 제수(나누는 수)가 1 또는 피제수가 아니면 소수가 아니므로.
}
}else{ // if의 조건을 반대로 생각. i나누기 j의 나머지가 0과 같지 않다면
continue; // 계속한다.
// continu; 아랫부분을 무시하고 이 위로만 반복. 나누어 떨어지는 수 외에는 다 무시하게 된다.
}
printf("%d", i); // %d는 decimal = 10진수. %d 정수값을 출력하겠다. 그 값이 i
/* %f 실수값을 출력하겠다 그값은 ? %c 문자 값을 출력하겠다 그 값은 ? %s 문자 열 값을 출력하겠다 그 값은 ? 등등
%d는 표현할 수 있는대로 끝까지. 한자릿수는 %1d, 두 자릿수는 %2d... */
}
}
Q&A 시간
Q. 변수 이름은 맘대로 하라길래 d로 했는데, 왜 j 입니까?
구글링 해보니까 다른 사람들도 j로 하던데 뭔가 규칙이 있나요?
A. 보통 반복문을 이중 삼중으로 되면 변수로 제일 많이 쓰이는 게 i, j, k임.
별 의미는 없음.
Q. 그런데 왜 구하려는 값을 true로 하지 않고 false로 하나요?
A. 그거는 맘대로 해도 됨.
바꾸고 싶으면 if(check) continue; 를 if(!check)continue; 로 바꿔야함.
Q. !는 무슨 차이죠?
A. if( check ) 하면 check 가 true 일때 실행.
if( !check ) 일때는 check가 false 일때 실행.
그래서 bool check = true; 로 초기화하고
소수가 아닌 걸 거를 때 check = false; 하게 되면, if( !check ) continue; 해야함.
-> 배열 할 줄 몰라서 숙제 바뀜.
1~100 사이에 있는 소수 구하기
소수 : 1과 자기 자신 외에는 나누어지지 않는 수.
로 숙제가 바뀜.
나의 답 :
for(int i=2 ; i<=100 ; i++)
{ for (int d=1 ; d<=i ; d++)
if (i%d == 0)
이 한계. 변수랑 문법은 배웠는데 출력 하는거를 모름.
선생님 답 :
for(int i = 1; i <= 100; i++) // 1부터 시작이라고 했으니 i=1
{
bool check = false; // 초기화. 소수가 맞다라고 기본 전제를 깔아 둠.
for(int j = 1; j < i; j++) // i가 1일때, j는 0인데 j는 1부터 시작이므로, i가 0일때는 나누어 지지 않음.
{
if(i%j == 0) // 만일, i 나누기 j의 나머지가 0과 같다면,
{
if(j != 1 && j != i) // 만일 j가 1과 다르고 또한 i와도 다르다. 라면
{
check = true; // 그것은 소수가 아니므로 반복을 종료한다.
break;
// 나누어 떨어지기는 했지만, 제수(나누는 수)가 1 또는 피제수가 아니면 소수가 아니므로.
}
}else{ // if의 조건을 반대로 생각. i나누기 j의 나머지가 0과 같지 않다면
continue; // 계속한다.
// continu; 아랫부분을 무시하고 이 위로만 반복. 나누어 떨어지는 수 외에는 다 무시하게 된다.
}
printf("%d", i); // %d는 decimal = 10진수. %d 정수값을 출력하겠다. 그 값이 i
/* %f 실수값을 출력하겠다 그값은 ? %c 문자 값을 출력하겠다 그 값은 ? %s 문자 열 값을 출력하겠다 그 값은 ? 등등
%d는 표현할 수 있는대로 끝까지. 한자릿수는 %1d, 두 자릿수는 %2d... */
}
}
Q&A 시간
Q. 변수 이름은 맘대로 하라길래 d로 했는데, 왜 j 입니까?
구글링 해보니까 다른 사람들도 j로 하던데 뭔가 규칙이 있나요?
A. 보통 반복문을 이중 삼중으로 되면 변수로 제일 많이 쓰이는 게 i, j, k임.
별 의미는 없음.
Q. 그런데 왜 구하려는 값을 true로 하지 않고 false로 하나요?
A. 그거는 맘대로 해도 됨.
바꾸고 싶으면 if(check) continue; 를 if(!check)continue; 로 바꿔야함.
Q. !는 무슨 차이죠?
A. if( check ) 하면 check 가 true 일때 실행.
if( !check ) 일때는 check가 false 일때 실행.
그래서 bool check = true; 로 초기화하고
소수가 아닌 걸 거를 때 check = false; 하게 되면, if( !check ) continue; 해야함.
댓글
댓글 쓰기