C언어) 제 코드 수정해 주시면 감사하겠습니다.

around_841의 이미지

안녕하세요. 문제를 푸는 도중에 제 코드에 어느 부분이 틀렸길래 답이 안나오는지 몰라서 질문드립니다.

문제)
사슴과 학이 있다. 모두 합치면 35마리이고 다리의 합은 94개이다. 이 경우 사슴과 학이 각 몇 마리인지를 구하는 프로그램을 작성하라.

작성코드)
#define _CRT_SECURE_NO_WARNINGS
#include

int main()
{
int x, y;
int sum1, sum2;

x = 0;
y = 0;
sum1 = 35;
sum2 = 94;

while (sum1)
{
while (sum2)
{
sum2 = ((4 * x) + (2 * y));
x++, y++;
}

sum1 = x + y;

x++; y++;
}

printf("사슴과 학은 각 %d 마리, %d마리입니다.", x, y);


return 0;
}

세벌의 이미지

1. KLDP 에서 소스코드에는 code 태그 써야 제대로 보입니다.
2. 아래 코드를 마지막에만 넣지 말고 소스 중간 중간에 넣어보세요.

printf("사슴과 학은 각 %d 마리, %d마리입니다.", x, y);
하나 더.
sum1 = 35;
써 놓고
sum1 = x + y;
써 놓은 건 뭔지 생각해 보셔요. 그러면 답은 스스로 찾으실 수 있을 겁니다.
#define _CRT_SECURE_NO_WARNINGS
이 줄은 왜 넣으셨는지 모르겠네요.
around_841의 이미지

#define _CRT_SECURE_NO_WARNINGS는 다른 scanf 문제 푸느라 필요해, 지우지 않아서 넣었습니다.
사실 제가 답 보다도 궁금한건...제 풀이 논리랍니다.
우선,
while (sum2)에서 x++, y++;는 곧 x,y가 1씩 커져 sum2 = ((4 * x) + (2 * y)); =94라는 조건을 만족하는 x y 값을 찾을 수 있을거라 생각해서 넣었습니다.
그렇게, while (sum2)에서 마찬가지로 x++, y++;는 곧 x,y가 1씩 커져 sum1 = x + y; = 35를 만족하는 값이 있을것이고...두 while함수를 만족하는 공통된 x 와 y 가 밑에있는 printf("사슴과 학은 각 %d 마리, %d마리입니다.", x, y); 에 출력될거라고 생각해서 작성한건데요... 이러한 논리에서 제가 착각한 부분이 어디인가요?

세벌의 이미지

그래서 소스 중간 중간에

printf("사슴과 학은 각 %d 마리, %d마리입니다.", x, y);
넣으라고 힌트 드린 거예요. 마지막 뿐 아니라. 중간 중간에.
님께서 생각하는 대로 x 값, y 값이 움직이는지 살펴보셔요.

답을 그냥 알려드리면 스스로 공부할 기회를 빼앗아버리는 거라서...

라스코니의 이미지

sum1, sum2는 계속 증가하게 되는데 while(sum1) while(sum2)에서 탈출할 수 있는 조건이 없습니다.
아마 무한루프 돌지 않나요? 이문제를 수치해석적으로 푸는게 아니면 2차 다항식으로 푸는게 맞겠죠.

세벌의 이미지

2차 다항식까지는 아니고 1차 단항식으로 풀 수 있겠죠.

세벌의 이미지

사슴이 x 마리면 학은 sum1 - x 마리죠. 이걸 활용하면 변수 y는 필요 없겠네요.
y 변수를 쓴다면

y = sum1 - x;
를 소스 코드에 넣어 보셔요.
익명 사용자의 이미지

#include <stdio.h>
 
int main(){ puts("사슴과 학은 각 12마리, 23마리입니다."); return 0; }

뭐, 입력이 고정되어 있고 별로 크지 않다면, 이런 최적화도 가능하다고 볼 수 있지요. :)

황병희의 이미지

(bionic)soyeomul@localhost:~/111$ cat 1.py
# -*- coding: utf-8 -*-
 
a = list(range(36)) # 사슴 초기화 
b = list(range(36)) # 학 초기화
 
def hap(x, y): # 합
    xx = []; yy = []
    for i in x:
        for j in y:
            if i + j == 35:
                xx.append(i)
                yy.append(j)
 
    return zip(xx, yy)
 
def hapdari(x, y): # 합다리
    xx = []; yy = []
    for i in x:
        for j in y:
            if 4 * i + 2 * j == 94:
                xx.append(i)
                yy.append(j)
 
    return zip(xx, yy)
 
합 = list(hap(a, b))
합다리 = list(hapdari(a, b))
 
print(set() & set(합다리), "앞에꺼 [사슴] 뒤에꺼 [학]입니다") 
 
# EOF
(bionic)soyeomul@localhost:~/111$ python3 1.py
{(12, 23)} 앞에꺼 [사슴] 뒤에꺼 []입니다
(bionic)soyeomul@localhost:~/111$ 

[우분투 18.04 파여폭스 나비에서 적었어요~]

--
^고맙습니다 감사합니다_^))//

세벌의 이미지

질문에서 C언어라 했는데, python으로 답을 하시면...

코드를 보아하니 쉬운 문제를 일부러 어렵게 풀어 놓으신 거 같기도 하고...

다음에는 또 다른 언어의 답이 나올 거 같네요 :)

파이썬3의 이미지

세벌 wrote:
쉬운 문제

중학교때 배운 연립방정식을 세벌님은 기억하고 있어요.
그래서 세벌님은 쉽다라는 표현을 쓴거지요.
하지만 콤푸타는 연립방정식이 무엇인지 모릅니다.
저도 중학교때 배운 연립방정식을 잊어먹었어요.

태어나서 한번도 연립방정식을 풀지 못한 것처럼 그런마음으로 파이썬 코드로 옮겨봤어요~
그래서 불합격을 받았어도 기쁘네요^^^

감사합니다^^^

[우분투 18.04 파여폭스 나비에서 적었어요~]

세벌의 이미지

질문한 사람은 C언어를 물어봤는데 답을 Python으로 하셔서 그런 건데요...
KLPD 분위기가 워낙 다양한 언어에 대한 답이 나오긴 하지만요. :)

여기에 C 언어로 답을 알려주면 스포일러 되겠죠?

파이썬3의 이미지

덕분에 C언어 연습 했네요~^^^
https://gitlab.com/soyeomul/test/-/commit/1ab41efa35dd4ddeadda2df5a56027e0ae7febb9

[우분투 18.04 파여폭스 나비에서 적었어요~]

세벌의 이미지

주의. 이 문제를 안 풀고, 아래 링크를 복사 붙이기 해서 그대로 낸다면 점수 잘 나온다는 보장 못 합니다.
이미 문제를 푼 사람이 아래 링크 보고 이런 방법도 있구나 하면 상관 없지만요.

http://sebul.sarang.net/q2a/?qa=275/c%EC%96%B8%EC%96%B4-%EC%A7%88%EB%AC%B8-%EC%82%AC%EC%8A%B4-%ED%95%99-%EB%AA%87-%EB%A7%88%EB%A6%AC

익명 사용자의 이미지

inv([1 1 ; 2 4]) * [35 ; 94];

파이썬3의 이미지

한줄 권법 감사합니다^^^

파이썬3 드림

[우분투 18.04 파여폭스 나비에서 적었어요~]

세벌의 이미지

음? 이건 무슨 언어인가요?

https://www.mathworks.com/help/matlab/ref/inv.html
인가요?

Anti-Lock의 이미지

주어진 문제를 매트릭스로 표현하고,
매트릭스 연산으로 해를 구한다...

결국 매트릭스로 표현된 연립방정식을 푸는거지요..
그게 그말??

그런데... 이 글에서는 연립방정식의 해를 구하는 과정을 서술해야 할거 같습니다.

around_841의 이미지

아침에 자다가 다시 문제를 풀었는데요... if문으로 풀었습니다.
완전 초보라 이제 차근차근 배워가는 중인데요, 위에서 답변 주신 put이나 inv이런건 모르겠네요ㅋㅋㅋ
다들 답변 달아주셔서 감사드립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.