«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

ITGenerations

윤성우 열혈 c 프로그래밍 chap8-2 본문

프로그래밍/연습문제

윤성우 열혈 c 프로그래밍 chap8-2

ITGenerations 2017. 5. 13. 04:50

<예제1>


#include <stdio.h>


int main(void)

{

int i, j;


// i는 단

// j는 곱


for (i = 1; i < 10; i++) //반복문

{

if (i % 2 != 0) //짝수단만 출력

continue;



for (j = 1; j < 10; j++) //반복문중첩

{

if (i < j) //곱은 단보다 클수 없다.

break;

printf("%d x %d = %d\n", i, j, i*j); // 곱셈출력 나열

}

}




return 0;

}








<예제2 내가 다르게 푼 코드>

#include <stdio.h>


int main(void)

{

int a, z,result;



for (a = 0; a < 9; a++)

{

for (z =0; z <9;z++)

{

if ((a + z) != 9)

{

continue;

}

result = 11 * a + 11 * z;

printf("%d%d + %d%d=%d\n", a, z, z, a, result);

}




}





return 0; //종료

}



<예제2 정석대로 하는 정답>

#include <stdio.h>




int main(void)


{


int a, z;


int result;




for (a=0; a < 10; a++)


{


for (z=0; z < 10; z++)


{


if (a == z)


continue;


result = (a * 10 + z) + (z * 10 + a);


if (result == 99)


printf("%d%d+%d%d=%d\n", a, z, z, a, result);


}



}

return 0;

}








<예제2 추가 작업>

a,z 각각 양수 음수 일 경우에도 계산한것이나

결과적으로는 의미없었다.

az +za에서 z나 a가 음수가 된다고

az 혹은 za가 음수가 될수도 안될수도 있기 때문이다.

따라서, 이런식으로 푸는것은 의미가 없고,az가 양수인지, za가 음수인지 아는게 더 낫다.



다만, az+za는 zz+aa로 변환이 가능하고 zz+aa=99

즉, z+a=9라는 의미가 된다.

따라서 if( (z+a)!=9)를 사용해서 z+a=9일때만 구하면 된다.

달리 말하면

z가 100이면

a는 -91이라는 의미가 된다.


하지만 az와 za에 각각 양수 음수, 음수 양수 이렇게 입력을 하면

둘다 음수가 되므로 될 수가 없고.

양수*음수 + 음수*양수= 음수 != 99

따라서 이렇게 풀 수는 없다.


또 다른 것은 az에서 z가 10의 배수 혹은 그보다 더 클 수 없다.

za에서도 마찬가지이다.

az에서 컴퓨터는 

z=1*z 이렇게 인식한다

따라서, 10미만의 1의 배수여야 한다.


#include <stdio.h>


int main(void)

{

int a=0, z=0;

int result;


if (a >= 0 && z >= 0)

{

for (a = 0; a < 10; a++)

{

for (z = 0; z < 10; z++)

{

if (a == z)

continue;

result = (a * 10 + z) + (z * 10 + a);

if (result == 99)

printf("%d%d+%d%d=%d\n", a, z, z, a, result);

}

}

}


else if (a >= 0 && z <= 0)

{



for (a = 0; a < 10; a++)

{

for (z = 0; z < 10; z--)

{

if (a == z)

continue;

result = (a * 10 + z) + (z * 10 + a);

if (result == 99)

printf("%d%d+%d%d=%d\n", a, z, z, a, result);

}

}


}





else if (a <= 0 && z >= 0)

{

for (a = 0; a < 0; a--)

{

for (z = 0; z < 10; z++)

{

if (a == z)

continue;

result = (a * 10 + z) + (z * 10 + a);

if (result == 99)

printf("%d%d+%d%d=%d\n", a, z, z, a, result);

}

}




}





else(a <= 0 && z <= 0)

; { // !!!!!!!!!!!!!!!!!!!!! 당최 여기에 왜 ;를 넣는지 이해가 안됌

for (a = 0; a <= 0; a--)

{

for (z = 0; z < 0; z--)

{

if (a == z)

continue;

result = (a * 10 + z) + (z * 10 + a);

if (result == 99)

printf("%d%d+%d%d=%d\n", a, z, z, a, result);

}

}

}






return 0; //종료

}