학원수업/C언어

C언어 7일차

파워욱 2020. 10. 16. 21:20

1. 
a la russe
(1) 먼저 세 칸을 만들고 두 수를 1번 째, 2번째 칸에 적는다.

이 때, 1번째 수가 홀수이면 2번째 칸의 값을 3번째 칸에 옮겨 적는다.

 

(2)  1번 째 칸에 있는 값을 2로 나누고, 2번 째 칸에 있는 값에 2를 곱한다.

이 때, 1번째 수가 홀수이면 2번째 칸의 값을 3번째 칸에 옮겨적는다.

이 것을 1번 째 칸에 있는 값이 0이 될 때 까지 반복한다.

 

(3) 3번째 칸에 적혀진 모든 값을 더하여 출력한다.

 

#include<stdio.h>
#pragma warning (disable:4996) 



int main()
{
	int num1 = 21, num2 = 22, sum = 0 , result;
	result = num1 * num2;

	for (num1;num1>0;num1/=2)
	{
		if (num1 % 2 == 1)
		{
			sum += num2;
		
		}
		num2 *= 2;

	}
	printf("%d %d", sum, result);


	return 0;
}




2.  마방진 3 * 3
오른쪽하나 아래하나 홀수 정사각형이면 다 됨
492
357
816



#include<stdio.h>
#pragma warning (disable:4996) 
void Mabangjin(int(*ptr)[5], int arrSize)
{
	int row = arrSize - 1;
	int col = (arrSize - 1) / 2;
	const int maxRow = arrSize - 1;
	const int maxCol = arrSize - 1;

	ptr[row][col] = 1;
	for (int i = 2; i <= (arrSize * arrSize); i++)
	{
		if ((col + 1) > maxCol && (row + 1) > maxRow)
		{
			row--;
		}
		else if ((row + 1) > maxRow)
		{
			row = 0;
			col++;
		}
		else if ((col + 1) > maxCol)
		{
			row++;
			col = 0;
		}
		else
		{
			row++;
			col++;
		}
		if (ptr[row][col] != 0)
		{
			row -= 2;
			col--;
		}
		ptr[row][col] = i;
	}

}


int main(int argc, char* argv[])
{
	int a[5][5];
	int arrSize = sizeof(a[0]) / sizeof(int);
	for (int i = 0; i < arrSize; i++)
	{
		for (int j = 0; j < arrSize; j++)
		{
			a[i][j] = 0;
			printf("%2d ", a[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	Mabangjin(a, arrSize);
	for (int i = 0; i < arrSize; i++)
	{
		for (int j = 0; j < arrSize; j++)
		{
			
			printf("%2d ", a[i][j]);
		}
		printf("\n");
	}

}