면적 계산.


12

곡선 p (x) = a 0 + a 1 * x + a 2 * x 2 + ..., 선 y = 0, 선 x = 0 및 선 x = C 사이의 영역을 제공하는 가장 작은 코드

(예 : 이와 같은 것 :

원하는 지역)

x <C에 대해 p (x)> = 0이라고 가정 할 수 있습니다 (코드가 p (x)의 음수 값에 대해 작동하는 경우 보너스 포인트).

입력

C, a 0 , 1 , ...

산출

실수-면적

예 1 :

input: 2, 0, 1
output: 2.0

시험 2 :

input: 3.0, 0, 0.0, 2
output: 18

최신 정보:

  • C> 0도 가정
  • 면적이 곡선 사이에 있음, y = 0, x = C 및 x = 0
  • 입력은 모든 형식의 목록 일 수 있습니다. 쉼표로 구분할 필요는 없습니다.
  • 출력은 모든 형식의 실수 일 수 있습니다 (따라서 '18'은 '18 .0 '과 같이 유효한 출력입니다)

1
대답은 거의 모든 입력에 대해 "무한"이 될 것이기 때문에 문제를 놓친 것 같습니다.
피터 테일러

표준 입력에서 쉼표로 구분 된 문자열로 입력을 읽어야합니까? 아니면 float 목록을 인수로 취하는 함수를 작성할 수 있습니까?
sepp2k

x = 0, x = C, y = 0 및 곡선 사이를 의미합니까?
Keith Randall

2
@ 피터 : 나는 그렇게 생각하지 않습니다. 그는 역의 그림을 보여 주지만 (적분 분기 될 수 있음 ), 그가 지정한 함수는 다항식입니다. [0, C)에 대한 유한 적분은 유한 계수에 대해 잘 정의되고 유한해야합니다.
dmckee --- 전 운영자 고양이 1

1
@dmckee, 나는 그것을 알아 차 렸지만 내 요점은-\ inty에서 C로 다항식을 통합하고 사소한 비 다항식에 대해 더 많은 것을 통합하고 있다는 것이 었습니다. 이 문제를 해결하기 위해 질문이 수정되었습니다.
피터 테일러

답변:



5

파이썬 -71 63 자 :

a=input()
print sum(1.*a[i]*a[0]**i/i for i in range(1,len(a)))

0와 사이의 다항 함수의 간단한 통합입니다 C. 그리고 나는 그것을 테스트하지는 않았지만 음수 값에 효과가 있다고 확신합니다.


input()오늘 에 대해 새로운 것을 배웠 습니다 :)
st0le

3

하스켈, 85 자

f(c:l)=sum.map(\(i,x)->x*c**i/i)$zip[1..]l
main=getLine>>=print.f.read.('[':).(++"]")

1
질문은 당신이 다루는 것만 큼 엄격하지 않습니다. 입력 코드를 확실히 단순화하고 명시 적 I / O를 완전히 제거 할 수 있습니다.
JB

3

J, 26 자

f=:3 :'((1}.y)&p.d._1)0{y'

예 :

   f 2 0 1
2
   f 3 0 0 2
18

산뜻한! 좀 더 암묵적으로 만드는 방법을 찾을 수 없습니다. 그런 관계 d.가 저의 초급 J 기술에있어 쉬운 일이 아닙니다.
JB

@JB : 그렇습니다. d. 저도 "문제"입니다. :)
Eelvex

2

루비, 65 자

i=s=0
c=gets(q=",").to_f
$<.each(q){|a|s+=a.to_f*c**(i+=1)/i}
p s

코드는 줄 끝이 아닌 입력 끝까지 읽습니다. 따라서 Ctrl+ D를 눌러 입력을 종료 해야합니다 . ( echo파일 을 사용 하거나 파일에서 입력을 파이프 하십시오.)


1
변수에 ","를 할당하면 도움이 될 것입니다 ... 어떻게 이것에 대해 , c=gets(q=",").to_f그리고 $<.each(q){|a|s+=a.to_f*c**(i+=1)/i}하나의 문자를 저장합니다 ....
st0le

@ st0le : 아주 좋아요. 감사.
sepp2k

에 인수를 생략 할 수 있도록 할당 ","(또는 ?,더 짧은) . 그리고 한 문자보다 짧습니다 . ;)$/$<.each$<.map$<.each
Ventero

2

C GCC 186182 바이트

f(){i=0,l=1;float *d,s=0.0;d=malloc(sizeof(float)*50);scanf("%f",&d[0]);while(getchar()!='\n'){scanf("%f",&d[l]);l++;}for(i=0;i<l;i++)s+=d[i+1]*pow(d[0],(i+1))/(i+1);printf("%f",s);}

이 프로그램은 곡선 y = 0, x = C 및 x = 0 사이의 모든 곡선에 대한 출력 (면적)을 제공합니다. 0 에서 48float 까지의 계수를 취할 수도 있습니다 . 첫 번째로 허용 된 입력 뒤에 계수 가 옵니다. 마지막 계수 뒤를 누릅니다 .CÈnter

void f()
{
  int i=0,l=1;
  float *d,s=0.0;
  const int sz=100;
  d=malloc(sizeof(float)*sz);

  scanf("%f",&d[0]);
  while(getchar()!='\n')
  {
    scanf("%f",&d[l]);
    l++;
  }

  for(i=0;i<l;i++)
    s+=d[i+1]*pow(d[0],(i+1))/(i+1);

   printf("%f",s);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.