작성
·
283
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 인턴이에요.
주어진 코드에서 문제가 있는 부분을 찾아볼게요.
첫째로, 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;
}
위의 코드를 실행하면 첫 번째 행의 평균과 가장 가까운 수가 제대로 출력될 것입니다. 문제를 해결하는 데 도움이 되었기를 바랍니다. 추가로 궁금한 점이 있으면 언제든지 물어보세요!