U E D R , A S I H C RSS

최소정수의합/송지훈

~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)

근데 이렇게만 하면 구하려는 최소 정수값을 알 수가 없어서

요리조리 해보려고 했는데 잘 모르겠슴다...-_-;
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:16
Processing time 0.0418 sec