코딩도장

허근까지 나타내는 이차방정식

  • 전에 올라온 이차방정식 문제가 2개 있었지만, 허근 표기는 하지 않았습니다.
  • 이 문제에서는 허근까지 나타내어야 합니다.
  • 실근, 중근의 경우에는 수치로 나타내지만, 허근의 경우에는 a+bi(단, i=루트 -1) 꼴의 문자열로 나타내어야 합니다.
  • 허근일 경우, a가 0이면 bi 꼴로만 출력해야 하며, b가 1이면 a+i 꼴로만 출력해야 합니다.
  • 입력값은 이차항의 계수, 일차항의 계수, 상수항이며, 해를 구하기 위해 어떤 방식을 사용할지는 자유입니다.
  • 해는 실수부분과 허수부분이 모두 정수가 되도록 반올림해야 합니다.

예시 input

1 4 5

예시 output

-2 + i, -2 - i
수학 sqrt format

2021年07月03日 09:27

이준우

(追記) (追記ここまで)
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

10개의 풀이가 있습니다.

복소수.real은 복소수의 실수 부분을, 복소수.imag는 허수 부분을 반환하는 것을 사용했습니다.

a, b, c = map(int, input().split())
D=b**2-4*a*c
if D>0:
 print('실근: {0:.0f}, {1:.0f}'.format((-b+D**0.5)/(2*a),(-b-D**0.5)/(2*a)))
elif D==0:
 print('중근: {:.0f}'.format(-b/(2*a)))
else:
 A=(-b+D**0.5)/(2*a)
 if A.imag==1:
 AA='{:.0f}+i'.format(A.real)
 BB='{:.0f}-i'.format(A.real)
 else:
 AA='{0:.0f}+{1:.0f}i'.format(A.real,A.imag)
 BB='{0:.0f}-{1:.0f}i'.format(A.real,A.imag)
 print('허근: ', AA, BB,)

2021年07月20日 14:14

김용왕

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import math
Nlist = list(map(int,input().split()))
icheck = 1 if (Nlist[1]**2 - 4*Nlist[0] * Nlist[2]<0) else 0
N1 = -Nlist[1]/2 if (Nlist[1]%2 == 0) else -Nlist[1]
N2 = math.sqrt(abs((Nlist[1]/2)**2 - (Nlist[0]*Nlist[2]))) if (Nlist[1]%2 == 0) else math.sqrt(abs((Nlist[1]**2) - (4*Nlist[0]*Nlist[2])))
if (icheck == 0):
 print(N1+N2,'\n',N1-N2) if (N1+N2 != N1-N2) else print(N1+N2)
else:
 print(f"{N1} + {N2} i")
 print(f"{N1} - {N2} i")
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

C#

using System;
using System.Numerics;
namespace 허근까지
{
 class Program
 {
 static void Main()
 {
 var solution = new QuadraticEquation(1, 4, 5);
 Console.WriteLine(solution);
 }
 }
 class QuadraticEquation
 {
 private readonly double quadraticCoeff, linearCoeff, constantCoeff;
 public QuadraticEquation(double quadraticCoeff, double linearCoeff, double constantCoeff)
 {
 this.quadraticCoeff = quadraticCoeff; // 2차항 계수
 this.linearCoeff = linearCoeff; // 1차항 계수
 this.constantCoeff = constantCoeff; // 상수항 계수
 this.Discriminant = Math.Pow(linearCoeff, 2.0) - 4.0 * this.quadraticCoeff * this.constantCoeff;
 }
 // 판별식
 public double Discriminant { get; }
 // 해를 문자열 표현으로 반환
 public override string ToString()
 {
 Complex solution1 = (-linearCoeff + Complex.Sqrt(Discriminant)) / (2.0 * quadraticCoeff);
 Complex solution2 = (-linearCoeff - Complex.Sqrt(Discriminant)) / (2.0 * quadraticCoeff);
 string expression1 = Complex2Expression(solution1);
 string expression2 = Complex2Expression(solution2);
 return Discriminant == 0 ? $"{expression1}" : $"{expression1}, {expression2}";
 }
 // 복소수 클래스를 문자열 표현으로 변환
 private static string Complex2Expression(Complex complex)
 {
 // 해의 정수 반올림
 int realValue = (int)Math.Round(complex.Real);
 int imagValue = (int)Math.Round(complex.Imaginary);
 // 해를 경우따른 문자열로 표현
 string first = realValue != 0 ? $"{realValue}" : "";
 string sign = imagValue < 0 ? "-" : "+";
 string second = Math.Abs(imagValue) != 1 ? $"{Math.Abs(imagValue)}i" : "i";
 if (imagValue == 0)
 {
 second = string.Empty;
 sign = string.Empty;
 }
 string expression = $"{first}{sign}{second}";
 if (expression == "")
 {
 expression = "0";
 }
 return expression;
 }
 }
}

2021年08月20日 11:20

mohenjo

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

근의 공식을 적용시켰습니다. 허근의 경우에는 sqrt(-x) = sqrt(x) * i 임을 이용했습니다.

a = int(input('이차항의 계수를 입력하세요. '))
b = int(input('일차항의 계수를 입력하세요. '))
c = int(input('상수항의 계수를 입력하세요. '))
d = b**2 - 4*a*c
if d < 0:
 real = round(-b / (2*a))
 imag = round((abs(d) ** 0.5) / (2*a))
 if real:
 if imag == 1: print(f'{real} + i, {real} - i')
 else: print(f'{real} + {imag}i, {real} - {imag}i')
 else:
 if imag == 1: print('i, -i')
 else: print(f'{imag}i, -{imag}i')
elif d == 0:
 print(round((-b + d ** 0.5) / (2*a)))
else:
 print(round((-b + d ** 0.5) / (2*a)), end=', ')
 print(round((-b - d ** 0.5) / (2*a)))

실행 결과입니다.

이차항의 계수를 입력하세요. 1
일차항의 계수를 입력하세요. 4
상수항의 계수를 입력하세요. 3
-1, -3
이차항의 계수를 입력하세요. 1
일차항의 계수를 입력하세요. 4
상수항의 계수를 입력하세요. 4
-2
이차항의 계수를 입력하세요. 1
일차항의 계수를 입력하세요. 4
상수항의 계수를 입력하세요. 5
-2 + i, -2 - i

2021年09月21日 17:20

이준우

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import math
def bangjung2(a,b,c):
 a=int(a)
 b=int(b)
 c=int(c)
 check=b**2-4*a*c
 aa=round(-b/(2*a))
 bb=round(math.sqrt(abs(check))/(2*a))
 #print (check)
 if check>0:
 #실근
 print ('x=%d, %d' %(aa+bb, aa-bb)) 
 elif check==0:
 #중근
 print ('x=%d' %(aa)) 
 else:
 #허근
 if abs(bb)==1:
 print ('x=%d+i, %d-i' %(aa, aa)) 
 else:
 print ('x=%d+%di, %d-%di' %(aa,abs(bb), aa,abs(bb))) 
in_num=input('이차방정식의 a b c를 입력해주세요')
in_num=in_num.split(' ')
bangjung2(in_num[0],in_num[1],in_num[2])

2022年01月08日 00:08

Buckshot

댓글 작성은 로그인이 필요합니다.
이차방정식의 a b c를 입력해주세요1 4 4 x=-2 이차방정식의 a b c를 입력해주세요1 4 5 x=-2+i, -2-i 이차방정식의 a b c를 입력해주세요1 4 3 x=-1, -3 - Buckshot, 2022年01月08日 00:09 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import sys
from numpy import equal
def determinatoR ( A , B , C ) :
 determinantt = B**2 - 4*(A)*(C)
 if determinantt >= 0 : return True
 else : return False
def realformulA ( A , B , C ) :
 resultt1 = int((-B + (B**2 - 4*A*C)**(1/2))/2*A)
 resultt2 = int((-B - (B**2 - 4*A*C)**(1/2))/2*A)
 print(f'{resultt1}'+',' , f'{resultt2}')
def imaginaryfomulA ( A , B , C ) :
 resultt1 = int(-B / ( 2*A ))
 resultt2 = int(((-(B**2 -4*A*C))*(1/2))/(2*A))
 if resultt1 == 0 :
 print( f'{resultt2}'+',' , f'{-(resultt2)}' )
 elif resultt2 == 1 :
 print( f'{resultt1}' , '+' , 'i'+',' ,f'{resultt1}' , '+' , 'i' )
 else :
 print( f'{resultt1}' , '+' , f'{resultt2}'+'i'+',' ,f'{resultt1}' , '+' , f'{-(resultt2)}'+'i' )
equationlistt = []
equationlistt = (sys.stdin.readline().strip()).split(' ')
equationlistt = list(map(float,equationlistt))
if determinatoR(equationlistt[0],equationlistt[1],equationlistt[2]) == True :
 realformulA (equationlistt[0],equationlistt[1],equationlistt[2])
elif determinatoR(equationlistt[0],equationlistt[1],equationlistt[2] ) == False :
 imaginaryfomulA(equationlistt[0],equationlistt[1],equationlistt[2]) 
else : pass

2022年07月15日 23:07

손은상

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import math as m
a = int(input("이차식 계수 : "))
b = int(input("일차식 계수 : "))
c = int(input("상수식 계수 : "))
D = b**2 - 4*a*c
if (D > 0):
 print("답 : %f, %f" % ((-b - m.sqrt(D))/(2*a), (-b + m.sqrt(D))/(2*a)))
elif (D == 0):
 print("답 : %d" % (-b/2))
else:
 print("답 : %f - %fi, %f + %fi" % (-b / (2*a), m.sqrt(-D) / (2*a), (-b / (2*a)), m.sqrt(-D) / (2*a)))

2022年08月31日 01:52

코딩재미

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
from typing import Union
from cmath import sqrt
class Complex:
 def __init__(self, z: Union[complex, int], n: int = 0):
 if type(z) == complex:
 self.real = z.real
 self.imag = z.imag
 if type(z) == int:
 self.real = z
 self.imag = n
 def __str__(self):
 if self.imag == 0:
 result = f"{self.real:.0f}"
 elif self.real == 0:
 result = f"{self.imag:.0f}i"
 elif self.imag == 1:
 result = f"{self.real:.0f} + i"
 elif self.imag == -1:
 result = f"{self.real:.0f} - i"
 elif self.imag > 0:
 result = f"{self.real:.0f} + {self.imag:.0f}i"
 elif self.imag < 0:
 result = f"{self.real:.0f} - {-self.imag:.0f}i"
 return result
a, b, c = map(int,input().split())
sol1 = Complex((-b + sqrt(b**2 - 4*a*c))/(2*a))
sol2 = Complex((-b - sqrt(b**2 - 4*a*c))/(2*a))
print(f"{sol1}, {sol2}")

2022年11月07日 16:18

isaac024

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
using System;
namespace solution
{
 class Program
 {
 static void Main(string[] args)
 {
 Console.WriteLine("이차방정식 ax2 + bx + c = 0 에서 a b c 을 입력하세요.(예: 1 -3 2)");
 string[] coeff = Console.ReadLine().Split(' ');
 Console.WriteLine("{0}x2 + {1}x + {2} = 0 의 해: {3}",coeff[0], coeff[1], coeff[2], solution(coeff));
 }
 private static string solution(string[] coeff)
 {
 string ans = "";
 double a = double.Parse(coeff[0]);
 double b = double.Parse(coeff[1]);
 double c = double.Parse(coeff[2]);
 double D = b * b - 4 * a * c;
 string strD = "";
 if (D < 0)
 {
 int rootD = (int)Math.Round(Math.Sqrt(-D) / (2 * a));
 strD = rootD == 1 ? "i" : rootD.ToString() + "i";
 if (-b / (2 * a) == 0)
 ans = strD + " , -" + strD;
 else
 ans = Math.Round(-b/(2*a)) + " + " + strD + " , " + Math.Round(-b / (2 * a)) + " - " + strD;
 }
 else if (D > 0)
 {
 double dd = Math.Sqrt(D) / (2 * a);
 Console.WriteLine(-b / (2 * a) + " : "+ dd);
 ans = Math.Round((-b - Math.Sqrt(D)) / (2 * a)).ToString() + " , " + Math.Round((-b + Math.Sqrt(D)) / (2 * a)).ToString();
 }
 else
 ans = Math.Round(-b/(2*a)).ToString();
 return ans;
 }
 }
}

2023年06月18日 19:48

insperChoi

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import math
coef = input(a)
a,b,c = coef.split( )
a, b, c = float(a), float(b),float(c)
discriminant = math.pow(b,2)-4*a*c
if discriminant >=0:
 x1, x2 = (-b+math.sqrt(discriminant))/(2*a), (-b-math.sqrt(discriminant))/(2*a)
 print(int(round(x1,0)),int(round(x2,0)))
else:
 print(f"{int(round((-b/(2*a)),0))}+{int(round(math.sqrt(abs(discriminant))/(2*a),0))}i", f"{int(round((-b/(2*a)),0))}-{int(round(math.sqrt(abs(discriminant))/(2*a),0))}i")

2023年07月13日 14:38

스탠리

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

(注記) 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
풀이 작성은 로그인이 필요합니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.

수학 x 6
sqrt x 1
format x 1
연관 문제

언어별 풀이 현황
전 체 x 10
python x 8
cs x 2
코딩도장 © 2014 · 문의 [email protected]
피드백 · 개인정보취급방침 · RSS

AltStyle によって変換されたページ (->オリジナル) /