ITGenerations
윤성우 열혈 c 프로그래밍 chap8-2 본문
<예제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; //종료
}
'프로그래밍 > 연습문제' 카테고리의 다른 글
윤성우 열혈 c 프로그래밍 goto문 (0) | 2017.05.13 |
---|---|
윤성우 열혈 c 프로그래밍 chap8-3 (0) | 2017.05.13 |
윤성우 열혈 c 프로그래밍 chap8-1 (0) | 2017.05.11 |
윤성우 열혈 c 프로그래밍 chap7-4 (0) | 2017.05.11 |
윤성우 열혈 c 프로그래밍 chap7-3 (0) | 2017.05.11 |