急勾配の判定
Posted feedbacks - C
Cで普通に。 O(n)です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h>
static int is_kyuukoubai(int* a, int num)
{
int i;
int sum=0;
for(i=num-1; i>=0; i--)
{
if (a[i]<=sum) return 0;
sum+=a[i];
}
return 1;
}
int main()
{
int test[5] = { 20, 10, 5, 3, 1 };
if (is_kyuukoubai(test, 5)) printf("kyuukoubai.\n");
else printf("not kyuukoubai.\n");
return 0;
}
|


nobsun
#8891()
Rating1/1=1.00
有限の長さの数列で,各要素の値が,その要素の後ろにある残りの列に含まれるすべての要素の和よりも大きい列を「急勾配の列」ということにします(空列の和は0とします).
任意の長さ(ただし有限の長さの)数列を与えられたとき,それが「急勾配の列」であるかどうかを判定する述語関数を定義してください.
必須ではありませんが,効率についてコメントがあれば面白いかもしれませんね.
[ reply ]