~cpp
find = [n+1|n <- [1..], (n*(n+1)/2) <= 3000 <= ((n+1)*(n+2)/2)]
풀이
=> n의 범위를 무한대의 자연수로 잡고, n까지의 합과 n+1까지의 합 사이에 3000이 들어가는
그러한 n+1을 찾아보려고 식을 저렇게 썼습니다.
최대한 haskell로 짜보려고 노력했는데 안되네요...
조건 제시법을 쓰는 방법이 잘못된건지...
아니면 수식에서 어딘가 잘못 쓴 부분이 있는 건지...
-> 파싱 에러, 즉 구문 에러가 나는 코드입니다. (<=) 함수가 어떤 전달인자를 받는지 알아보세요.
while 문을 쓰는 것이 필수 보조조건이었는데 haskell도 while문 쓰는 법이 있나요?
-> 그러고 보니 while 함수를 만들어서 써도 되겠다는 생각이..
아니면 다른 대부분의 맴버들처럼 C나 C++로 하는게 더 나은가요?
----
Haskell에서 굳이 반복이란 개념을 사용하지 않아도 되잖아요?ㅋㅋ
최소정수의합/임인택2 도 한 번 보세요.
----
C++로 한번 짜봤슴다.
~cpp
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int sum = 0, integer = 1;
while(sum <= 3000)
{
sum = sum + integer;
integer++;
}
cout << "The smallest 'n' for making the number what we want" << endl;
cout << "-->" << integer << endl;
cout << "Total sum is " << sum << endl;
return 0;
}
9/24
가드 (|)를 써서 조건문 형식으로 다시 짰습니다.
~cpp
little_sum (x:xs) y
|y <= 0 = 0
|otherwise = x + little_sum xs (y-x)
근데 이렇게만 하면 구하려는 최소 정수값을 알 수가 없어서
요리조리 해보려고 했는데 잘 모르겠슴다...-_-;