wggwvs   1년 전

질문검색도 뒤져보면서 몇가지 해보고 생각나는 것도 해봤는데

계속 100프로까지가서 틀렸다고 하네요.. 왜그런걸까요?

반례좀 알려주세요 ㅠㅠ

djm03178   1년 전

wggwvs   1년 전

#include

#include

#include

using namespace std;

int main() {

string a = "123";

cin >> a;

int b = a.size();

int a_1 = stoi(a);

if (a_1 > 10) {

int temp = a_1 - (b * 9);

int count = a.size();

int k = 0;

int x = 0;

int cc = 1;

for (int i = temp; i < a_1; i++) {

k = i;

x = i;

for (int j = 0; j < count; j++)

{

k += x % 10;

x /= 10;

}

if (k == a_1) { cout << i; cc = 0; break; }

}

if (cc > 0) { cout << 0; }

}

else { if (a_1 == 2) { cout << 1; }

if (a_1 == 2) { cout << 1; }

if (a_1 == 4) { cout << 2; }

if (a_1 == 6) { cout << 3; }

if (a_1 == 8) { cout << 4; }

cout << 0;

}

}

마지막에 10이하의 생성자가 없는 수도 0이 나오게 했는데 틀리는데 왜그런지 다른 반례 알 수 있을까여?..ㅠㅠ

wnwoghd22   1년 전

a가 10보다 작을 때의 처리가 제대로 되어있지 않습니다.

중괄호 위치, 예외처리가 틀렸네요.

wggwvs   1년 전

가르쳐 주신걸로 바꾸니까 정답처리는 되는데
제가 틀리게 제출했던 답과 뭐가 달라서 틀렸던건지 이해가 가지 않습니다.

10이하의 자연수중에서 2,4,6,8만 각 각 답을 출력하고 나머지는 0으로 출력하는건데

else{

if (a_1 ==2){ cout}

if(a_1 ==4 ){cout}

if( a_1 ==6 ){cout}

if (a_1 ==8){ cout}

cout<<0   //2,4,6,8 if문에서 안거러지면 전부 0으로 출력

}

이렇게 해도 똑같이 답이 나와야 하는거 아닌가요?

djm03178   1년 전

2, 4, 6, 8을 입력해보세요.

wggwvs   1년 전

와.... 제가 멍청했네요.. 알려주셔서 너무 감사합니다. 복받으실꺼에요^^

wnwoghd22   1년 전

질문자분의 코드대로라면, if 절 안의 cout을 실행한 후에도 마지막 줄에서 또 cout이 실행됩니다.

if () {} 문의 역할은 괄호 안의 조건이 성립하면 중괄호 안을 실행하는 것이지, 중괄호 뒤를 모두 생략하는 것은 아닙니다. 만약 if 뒤의 문장이 실행되지 않기를 원한다면 else를 붙여 분기문이라는 것을 확실히 해줘야 합니다.

예를 들어 

if (a == 2) { cout << 1; } cout << a; 라면 이는 1을 출력한 후에도 또 a를 다시 출력합니다.

하지만

if (a == 2) { cout << 1; } else cout << a; 라면 이는 1을 출력한 후 else 뒤를 무시합니다.

질문자분의 의도대로 2, 4, 6, 8이 걸러지려면 모든 if 문을 else로 연결해 주어야 하는 것이죠.

댓글을 작성하려면 로그인해야 합니다.