Tính diện tích.


12

Mã nhỏ nhất cho diện tích giữa đường cong p (x) = a 0 + a 1 * x + a 2 * x 2 + ..., dòng y = 0, dòng x = 0 và dòng x = C

(tức là một cái gì đó như thế này:

khu vực mong muốn)

Bạn có thể giả sử rằng p (x)> = 0 cho x <C (điểm thưởng nếu mã của bạn hoạt động cho các giá trị âm của p (x)).

Đầu vào

C, a 0 , 1 , ...

Đầu ra

một số thực - khu vực

Ví dụ 1:

input: 2, 0, 1
output: 2.0

Bài kiểm tra 2:

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

CẬP NHẬT:

  • C> 0 cũng được giả sử
  • khu vực nằm giữa đường cong, y = 0, x = C và x = 0
  • đầu vào có thể là một danh sách của bất kỳ hình thức nào; không nhất thiết phải phân tách bằng dấu phẩy.
  • đầu ra có thể là thực của bất kỳ dạng nào (do đó, '18' là đầu ra hợp lệ, như '18 .0 ')

1
Vì câu trả lời sẽ là "vô hạn" cho hầu hết mọi đầu vào, tôi nghĩ bạn đã hiểu sai vấn đề.
Peter Taylor

Có nên đọc đầu vào từ đầu vào tiêu chuẩn dưới dạng chuỗi được phân tách bằng dấu phẩy? Hoặc chúng ta có thể viết một hàm lấy danh sách các số float làm đối số không?
sepp2k

Ý của bạn là giữa x = 0, x = C, y = 0 và đường cong?
Keith Randall

2
@Peter: Tôi không nghĩ vậy. Anh ta cho thấy một hình ảnh của một nghịch đảo (tích phân sẽ phân kỳ), nhưng hàm mà anh ta chỉ định là một đa thức. Tích phân xác định trên [0, C) phải được xác định rõ và hữu hạn đối với các hệ số hữu hạn.
dmckee --- ex-moderator mèo con

1
@dmckee, tôi đã nhận thấy điều đó, nhưng quan điểm của tôi là anh ta đang tích hợp một đa thức từ - \ infty đến C, và cho bất kỳ đa thức không tầm thường nào phân kỳ. Câu hỏi hiện đã được sửa đổi để khắc phục điều này.
Peter Taylor

Câu trả lời:


3

Toán học: 48 ký tự

.

Sum[#[[i+1]]#[[1]]^i/i,{i,Length@#-1}]&@Input[]

-1 byte: Length@#-> Tr[1^#]. Ngoài ra, bạn có thể bỏ qua @Input[]và thực hiện một chức năng.
JungHwan Min

5

Python - 71 63 ký tự:

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

Đó là một sự tích hợp đơn giản của hàm đa thức giữa 0C. Và tôi đã không kiểm tra nó, nhưng tôi khá chắc chắn rằng nó hoạt động cho các giá trị âm.


Đã học được điều gì đó mới về input()ngày hôm nay :)
st0le

3

Haskell, 85 ký tự

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

1
Câu hỏi không nghiêm ngặt như bạn đối xử với nó. Bạn chắc chắn có thể đơn giản hóa mã đầu vào và có thể loại bỏ hoàn toàn với I / O rõ ràng.
JB

3

J, 26 ký tự

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

ví dụ

   f 2 0 1
2
   f 3 0 0 2
18

Khéo léo! Tôi không thể tìm ra cách để làm cho nó ngầm hơn. Đó d.là một sự kết hợp không làm cho nó rất dễ dàng với các kỹ năng J mới làm quen của tôi.
JB

@JB: Vâng, đó d. là một "vấn đề" đối với tôi quá. :)
E 12x

2

Ruby, 65 ký tự

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

Mã đọc cho đến khi kết thúc đầu vào, không phải cuối dòng. Vì vậy, bạn cần nhấn Ctrl+ Dđể chấm dứt đầu vào. (Đặt đầu vào bằng cách sử dụng echohoặc từ một tệp.)


1
tôi nghĩ rằng việc gán "," cho một biến sẽ giúp ... làm thế nào về điều này c=gets(q=",").to_f$<.each(q){|a|s+=a.to_f*c**(i+=1)/i}, lưu một char ....
st0le

@ st0le: Rất đẹp. Cảm ơn.
sepp2k

Gán ","(hoặc ?,, thậm chí ngắn hơn) để $/cho phép bạn bỏ qua đối số $<.each. Và $<.maplà một nhân vật ngắn hơn $<.each. ;)
Ventero

2

C GCC 186 182 byte

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);}

Chương trình này cung cấp một đầu ra (diện tích) cho bất kỳ đường cong nào giữa đường cong, y = 0, x = C và x = 0. Nó có thể lấy các hệ số ( floatcũng như) từ 0 đến 48 . Đầu vào được chấp nhận đầu tiên được Ctheo sau bởi các hệ số. Nhấn Èntersau hệ số cuối cùng.

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);
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.