• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

48번 질문있습니다!

23.08.09 16:10 작성 조회수 218

0

#include <iostream>

using namespace std;

int a[9][9];

int b[9];

int main(){

freopen("input.txt","rt",stdin);

int i,j,max,rev=0,tmp=2147000000;

float x=0.0,sum=0.0;

int c[9];

for(i=0;i<9;i++){

for(j=0;j<9;j++){

cin>>a[i][j];

sum+=a[i][j];

}

b[i]=(sum/9.0)+0.5;

sum=0.0;

}

for(i=0;i<9;i++){

for(j=0;j<9;j++){

tmp=a[i][j]-b[i];

if(tmp<0){

tmp*=-1;

}

if(tmp<max){

max=tmp;

rev=a[i][j];

}

if(max==tmp){

if(rev<a[i][j]){

rev=a[i][j];

}

}

}

c[i]=rev;

max=2147000000;

}

for(i=0;i<9;i++){

cout<<b[i]<<' '<<c[i]<<endl;

}

return 0;

}

이렇게 짰을때 출력창에서 나머지는 다 똑같이 나오는데 첫번째 행의 평균과 가장 가까운수가 0이 나옵니다. 혹시 왜 이렇게 나오는지 알려주실 수 있나요...?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.08.11

안녕하세요, 인프런 AI 인턴이에요.

주어진 코드에서 문제가 있는 부분을 찾아볼게요.

첫째로, tmp 변수를 초기화하는 부분에서 문제가 있습니다. tmp 변수의 초기값을 2147000000으로 설정했는데, 이는 답이 될 수 있는 범위보다 큰 값입니다. 따라서 tmp 변수의 초기값을 첫 번째 입력값 a[0][0]의 차이로 설정해야 합니다.

둘째로, max 변수와 rev 변수의 위치가 잘못되어 있습니다. max 변수와 rev 변수를 초기화하는 부분을 첫 번째 반복문 바깥으로 이동해야 합니다. 그렇지 않으면 매 반복마다 max 변수가 초기화되기 때문에 잘못된 결과가 나옵니다.

수정된 코드를 아래에 보여드릴게요.

#include <iostream>
using namespace std;
int a[9][9];
int b[9];
int main() {
	freopen("input.txt", "rt", stdin);
	int i, j, rev = 0, tmp, max = 2147000000;
	float x = 0.0, sum = 0.0;
	int c[9];
	for (i = 0; i < 9; i++) {
		for (j = 0; j < 9; j++) {
			cin >> a[i][j];
			sum += a[i][j];
		}
		b[i] = (sum / 9.0) + 0.5;
		sum = 0.0;
	}

	for (i = 0; i < 9; i++) {
		tmp = a[i][0] - b[i];
		if (tmp < 0) {
			tmp *= -1;
		}
		max = tmp;
		rev = a[i][0];
		for (j = 1; j < 9; j++) {
			tmp = a[i][j] - b[i];
			if (tmp < 0) {
				tmp *= -1;
			}
			if (tmp < max) {
				max = tmp;
				rev = a[i][j];
			}
			if (max == tmp) {
				if (rev < a[i][j]) {
					rev = a[i][j];
				}
			}
		}
		c[i] = rev;
	}

	for (i = 0; i < 9; i++) {
		cout << b[i] << ' ' << c[i] << endl;
	}

	return 0;
}

위의 코드를 실행하면 첫 번째 행의 평균과 가장 가까운 수가 제대로 출력될 것입니다. 문제를 해결하는 데 도움이 되었기를 바랍니다. 추가로 궁금한 점이 있으면 언제든지 물어보세요!