saiam12   1년 전

뭔가 제 코드를 보면 이해못하실수도 있는데 문제에 약간 공식이 있더라고요. 

예를 들면 n=1이면 2*2 정사각형이 만들어지는데 첫쨰줄에 1번쨰에는 0, 2번쨰에는 1(=2^0),3번쨰에는 4(=2^2)가 적힙니다.

만약 n=4여서 4*4인 정사각형이 만들어지면 첫째줄에 5번째에는 16(=2^4) 그리고 6번째~8번쨰는 이전에 규칙을 만족합니다.

여기서 이전이라고 하면 1,2,3번쨰에 있는 규칙이 맞게 되는것이죠. --> 6번째는 17(2^4+2^0), 7번째는 20(2^4+2^2) 이런식으로요

마찬가지로 세로줄로도 2^1,2^3,2^5의 규칙이 있습니다. 저는 이러한 방식을 기반으로 코드를 짰음을 염두해주시고 봐주세요

이떄 리스트z를 만든것은 위와 같은 변화가 일어날때의 좌표? 그것을 지정해두었습니다.

yhj1937   1년 전

다음 예에서 segfault가 발생하네요

saiam12   1년 전

감사합니다. 2 0 2에서 안되는 이유는 찾았습니다. 첫번쨰 if문에서 r이랑 c에 1씩 더해줬는데 if문 빠져나올떄 실수로 1씩 안빼줘서 생긴 일같습니다. 근데 여전히 틀렸다고 나오군요. 혹시 반례를 더 발견하게 된다면 댓글 남겨주시길 부탁드리겠습니다.

yhj1937   1년 전

코드를 어떻게 고쳤는지 올려주셔야 도움을 드릴 수 있습니다. 댓글에 소스 추가를 눌러 고친 코드를 올려주세요.

그리고 이걸로 다 고쳐질 지는 모르겠지만 보이는 문제점은 다음과 같습니다.

1. 배열 범위 초과

x, y, z 를 n 번째까지 접근하므로 7 번째 줄을 int x[n+1], ... 로 고치세요.

2. pow 함수는 지양하세요.

pow는 double을 반환해서 오차가 발생할 위험이 있습니다. 2^m을 쓰고 싶으면 시프트 연산 1 << m 을 쓰세요.

saiam12   1년 전

else if (c==1){

c=0;

break;

}

위부분을 r과 c에 첫번쨰 if문에 각각 추가했습니다

쉬프트 연산으로 바꿔보겠습니다 감사합니다

saiam12   1년 전

말씀해주신 배열 범위 초과 부분을 수정하니 되었습니다. 감사합니다.

이 문제와 상관은 없으나 한개만 더 여쭤보고 싶은게 있는데 if문에 조건문 쓸때 1<a<10 이러면 오류가 나고

1<a and a<10 이런식으로 해야 될 때가 있더군요 이런것도 그냥 단순히 오류인가요?

yhj1937   1년 전

1 < a < 10 과 같은 문법은 C/C++에서 지원하지 않습니다. 보통 1 < a && a < 10을 씁니다.

그리고 언제나 코드를 올릴 때는 전체 코드를 올리시는 게 답변 받기 쉽다는 점도 말씀드립니다. 고친 부분만 말로 설명하시면 이해하기 어려워요.

saiam12   1년 전

감사합니다. 다음부터 주의하겠습니다.

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