본문 바로가기

C언어 in 42Seoul (라피신)

c05

ex00

#include <io.h>
#include <stdio.h>
int		ft_iterative_factorial(int nb)
{
	if (nb < 0)
		return (0);
	if (nb==1)
		return (1);

	return nb * ft_iterative_factorial(nb-1);
}

int main(void){
	printf("%d", ft_iterative_factorial(-3));
	return 0;
}

재귀를 사용한 팩토리얼 구현 ->  문제 잘읽자 반복함수 작성하래서 아래로 바꿈 

다음 문제에 재귀로 하라고 나옴.

 

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_iterative_factorial.c                           :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/03 19:40:45 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/03 19:40:45 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <stdio.h>
int		ft_iterative_factorial(int nb)
{
	int answer;

	answer=1;
	if (nb < 0)
		return (0);
    if (nb == 0)
    	return (1);
	if (nb==1)
		return (1);

	while(nb){
		answer *= nb;
		nb--;
	}

	return answer;
}

int main(void){
	printf("%d", ft_iterative_factorial(5));
	return 0;
}

ex01   

 

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_recursive_factorial.c                           :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/03 19:52:15 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/03 19:52:15 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <stdio.h>
int		ft_recursive_factorial(int nb)
{
	if (nb < 0 )
		return (0);
	if (nb == 0)
		return (1);
	if (nb == 1)
		return (1);

	return nb * ft_recursive_factorial(nb-1);
}

int main(void){
	printf("%d", ft_recursive_factorial(5));
	return 0;
}

ex02

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_iterative_power.c                               :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/03 20:25:30 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/03 20:25:30 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <stdio.h>
int		ft_iterative_power(int nb, int power)
{
	int answer;

	answer = 1;
	if (power ==0)
		return (1);
	if (power < 0)
		return (0);
	while(power)
	{
		answer *= nb;
		power--;
	}
	return answer;
}
int main(void)
{
	printf("%d",ft_iterative_power(2, 0));
	return 0;
}

ex03

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_recursive_power.c                               :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/03 20:40:13 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/03 20:40:13 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <stdio.h>
int		ft_recursive_power(int nb, int power)
{
	int answer;

	answer = 1;
	if (power ==0)
		return (1);
	if (power < 0)
		return (0);

	return nb * ft_recursive_power(nb,  power-1);
}
int main(void)
{
	printf("%d", ft_recursive_power(2, 4));
	return 0;
}

ex04

#include <io.h>
#include <stdio.h>
int		ft_fibonacci(int index)
{
	if (index < 0)
		return (-1);
	else if (index == 0)
		return (0);
	else if (index < 2)
		return (1);
	else
		return (ft_fibonacci(index - 2) + ft_fibonacci(index - 1));
}
int main()
{
	printf("%d",ft_fibonacci(2));

ex05

#include <unistd.h>
#include <stdio.h>
int	ft_sqrt(int nb)
{
	long long i;
	long long num;

	if (nb <= 0)
		return (0);
	i = 1;
	num = (long long)nb;
	while (i * i <= num)
	{
		if (i * i == num)
			return (i);
		i++;
	}
	return (0);
}

int main(void)
{
	printf("%d", ft_sqrt(1));
	return 0;
}
#include <io.h>
#include <stdio.h>

int	ft_sqrt(int nb)
{
	long long i;

	if (nb <= 0)
		return (0);
	i = 1;
	while (i)
	{
		if (i * i == nb)
			return (i);
		i++;
	}

	return (0);
}
int 	main(void)
{
	printf("%d", ft_sqrt(1073741824));
	return (0);
}

-2^31 ~ 1^31-1

그러므로 2^30인 수를 넣었을땐 sqrt 제대로 출력 나와야 한다. 

 

 

ex06

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_is_prime.c                                      :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/03 23:50:58 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/03 23:50:58 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <stdio.h>
int		ft_is_prime(int nb)
{
	int i;
	int count;

	count = 0;
	i = 1;
	if (nb<=1)
		return 0;

	while (i<=nb)
	{
		if (nb%i==0)
			count++;
		i++;
	}

	if (count==2)
		return (1);
	else
		return (0);
}

int main(){
	printf("%d", ft_is_prime(7));
	return 0;
}

1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수. → 1 은 소수가 아니다. → 음수 소수가 아니다.

 

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_find_next_prime.c                               :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/03 23:59:48 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/03 23:59:48 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <Stdio.h>






int		ft_find_next_prime(int nb)
{
	int j;
	int i;
	int count;

	j = 1;
	i = 1;
	while(i<=nb)
	{
		if (nb % i ==0)
			count++;
		i++;
	}
	if (count == 2)
		return nb;
	else
	{
		ft_find_next_prime(nb+1);
	}

}

int 	main()
{
	printf("%d", ft_find_next_prime(9));
	return 0;
}
#include <io.h>
#include <stdio.h>
int		ft_is_prime(int nb)
{
	int i;

	i = 2;
	while (nb % i != 0)
	{
		i++;
	}
	if (nb==i)
		return (1);
	return (0);
}
int main()
{
	printf("%d", ft_is_prime(300));
	return 0;
}

틀렷대서 다시짯어요

ex07

 

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_find_next_prime.c                               :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/03 23:59:48 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/03 23:59:48 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <Stdio.h>


int		ft_is_prime(int nb)
{
	int i;
	int count;

	count = 0;
	i = 1;
	if (nb<=1)
		return 0;

	while (i<=nb)
	{
		if (nb%i==0)
			count++;
		i++;
	}

	if (count==2)
		return (1);
	else
		return (0);
}

int		ft_find_next_prime(int nb)
{
	int next;
	next=nb;
	if (ft_is_prime(nb) == 1)
		return nb;

	while (ft_is_prime(next)==0)
		next++;
	return next;


}
int 	main()
{
	printf("%d", ft_find_next_prime(9));
	return 0;
}

ㅅ소수인지 판별하는 함수

그리고 그 소수로 다음걸 찾는 함수이다

소수이면 그 소수 바로 리턴

소수 아니면 다음 소수 리턴

while은 참일때만 돈다. 그래서 소수 아닌거는 계속 돈다 (0) 근데 소수 아니게되면 멈추고 리턴

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_find_next_prime.c                               :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/06 14:50:07 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/08 23:17:04 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <stdio.h>
int		ft_is_prime(int nb)
{
	int i;

	i = 2;
	while (nb % i != 0)
	{
		i++;
	}
	if (nb==i)
		return (1);
	return (0);
}

int		ft_find_next_prime(int nb)
{
	int next;

	next = nb;
	if (ft_is_prime(nb) == 1)
		return (nb);
	while (ft_is_prime(next) == 0)
		next++;
	return (next);
}
int main()
{
	printf("%d", ft_find_next_prime(300));
	return 0;
}

ㅅ 

ex08

/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_ten_queens_puzzle.c                             :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/04 00:35:51 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/04 00:35:51 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <stdio.h>
void	ft_putchar(char c)
{
	write(1, &c, 1);
}

int		ft_ten_queens_puzzle_test(int table[10], int x, int y)
{
	int i;

	i = -1;
	while (++i < x)
		if (y == table[i] ||
				i + table[i] == x + y ||
				i - table[i] == x - y)
			return (0);
	return (1);
}

void	ft_ten_queens_puzzle_recur(int table[10], int *res, int pos)
{
	int i;
	int i2;

	if (pos == 10)
	{
		*res += 1;
		i2 = -1;
		while (++i2 < 10)
			ft_putchar(table[i2] + '0');
		ft_putchar('\n');
	}
	else
	{
		i = -1;
		while (++i < 10)
			if (ft_ten_queens_puzzle_test(table, pos, i))
			{
				table[pos] = i;
				ft_ten_queens_puzzle_recur(table, res, pos + 1);
			}
	}
}

int		ft_ten_queens_puzzle(void)
{
	int		table[10];
	int		i;
	int		res;

	i = -1;
	while (++i < 10)
		table[i] = -1;
	res = 0;
	ft_ten_queens_puzzle_recur(table, &res, 0);
	return (res);
}
int main()
{
	printf("%d",ft_ten_queens_puzzle());
	return 0;
}
/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_ten_queens_puzzle.c                             :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/04 00:35:51 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/04 00:35:51 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <stdio.h>
int res=0;
void	ft_putchar(char c)
{
	write(1, &c, 1);
}

int		ft_ten_queens_puzzle_test(int table[10], int x, int y)
{
	int i;

	i = -1;
	while (++i < x)
		if (y == table[i] ||
				i + table[i] == x + y ||
				i - table[i] == x - y)
			return (0);
	return (1);
}

void	ft_ten_queens_puzzle_recur(int table[10],  int pos)
{
	int i;
	int i2;

	if (pos == 10)
	{
		res += 1;
		i2 = -1;
		while (++i2 < 10)
			ft_putchar(table[i2] + '0');
		ft_putchar('\n');
	}
	else
	{
		i = -1;
		while (++i < 10)
			if (ft_ten_queens_puzzle_test(table, pos, i))
			{
				table[pos] = i;
				ft_ten_queens_puzzle_recur(table, pos + 1);
			}
	}
}

int		ft_ten_queens_puzzle(void)
{
	int		table[10];
	int		i;


	i = -1;
	while (++i < 10)
		table[i] = -1;

	ft_ten_queens_puzzle_recur(table, 0);
	return (res);
}


int main()
{
	printf("%d", ft_ten_queens_puzzle());
	return 0;
}
/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_ten_queens_puzzle.c                             :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/04 00:35:51 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/04 00:35:51 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <stdio.h>
int res=0;
void	ft_putchar(char c)
{
	write(1, &c, 1);
}

int		ft_ten_queens_puzzle_test(int table[10], int x)
{
	int i;

	i = -1;
	while (++i < x)
		if (table[x] == table[i] ||(table[x] - table[i]) == x-i || -(table[x] - table[i]) == x-i)
			return (0);
	return (1);
}

void	ft_ten_queens_puzzle_recur(int table[10],  int pos)
{
	int i;
	int i2;

	if (pos == 10)
	{
		res += 1;
		i2 = -1;
		while (++i2 < 10)
			ft_putchar(table[i2] + '0');
		ft_putchar('\n');
	}
	else
	{
		i = -1;
		while (++i < 10)
			{
				table[pos] = i;
				if (ft_ten_queens_puzzle_test(table, pos))
					ft_ten_queens_puzzle_recur(table, pos + 1);
				}
	}
}

int		ft_ten_queens_puzzle(void)
{
	int		table[10];
	int		i;


	i = -1;
	while (++i < 10)
		table[i] = -1;

	ft_ten_queens_puzzle_recur(table, 0);
	return (res);
}


int main()
{
	printf("%d", ft_ten_queens_puzzle());
	return 0;
}
/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_ten_queens_puzzle.c                             :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/04 00:35:51 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/04 00:35:51 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <stdio.h>
int res;
void	ft_putchar(char c)
{
	write(1, &c, 1);
}

int		check(int table[10], int x)
{
	int i;

	i = -1;
	while (++i < x)
		if (table[x] == table[i] ||(table[x] - table[i]) == x-i || -(table[x] - table[i]) == x-i)
			return (0);
	return (1);
}

void	ft_ten_queens_find(int table[10],  int pos)
{
	int i;
	int i2;

	if (pos == 10)
	{
		res++;
		i2 = -1;
		while (++i2 < 10)
			ft_putchar(table[i2] + '0');
		ft_putchar('\n');
	}
	else
	{
		i = -1;
		while (++i < 10)
			{
				table[pos] = i;
				if (check(table, pos))
					ft_ten_queens_find(table, pos + 1);
				}
	}
}

int		ft_ten_queens_puzzle(void)
{
	int		table[10];
	int		i;

	i = -1;
	while (++i < 10)
		table[i] = -1;

	ft_ten_queens_find(table, 0);
	return (res);
}


int main()
{
	printf("%d", ft_ten_queens_puzzle());
	return 0;
}
/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_ten_queens_puzzle.c                             :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: minjeoki <minjeoki@student.42seoul.kr>     +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2021/03/04 00:35:51 by minjeoki          #+#    #+#             */
/*   Updated: 2021/03/04 00:35:51 by minjeoki         ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <io.h>
#include <stdio.h>
int		count;

void	ft_putchar(char c)
{
	write(1, &c, 1);
}

int		check(int col[10], int x)
{
	int i;

	i = -1;
	while (++i<x)
	{
		if (col[x]==col[i] || (col[x]-col[i])==x-i || -(col[x]-col[i])==x-i)
			return 0;
	}
	return 1;
}

void	ft_ten_queens_find(int col[10], int x)
{
	int i;
	int j;
	i = -1;
	if (x==10)
	{
		count++;
		while (++i<10)
			ft_putchar(col[i]+'0');
		ft_putchar('\n');
	}
	else
		{
			j = -1;
			while (++j<10)
			{
				col[x]=j;
				if (check(col, x))
					ft_ten_queens_find(col, x+1);
			}

		}
}

int		ft_ten_queens_puzzle(void)
{
	int 	col[10];
	int 	i;

	i = -1;
	while (++i<10)
		col[i]=-1;
	ft_ten_queens_find(col, 0);
	return count;
}

int 	main()
{
	printf("%d", ft_ten_queens_puzzle());
	return 0;
}

d완성ㅇ

'C언어 in 42Seoul (라피신)' 카테고리의 다른 글

c07  (0) 2021.03.10
시험정리  (0) 2021.03.09
exam01대비  (0) 2021.02.26
c04  (0) 2021.02.26
c04  (0) 2021.02.26