프로젝트 오일러 11
Reference
http://forum.falinux.com/zbxe/index.php?document_srl=408129&mid=C_LIB
http://forum.falinux.com/zbxe/?document_srl=408126&mid=C_LIB&sort_index=readed_count&order_type=desc
프로젝트 오일러 11
#include
#include
void main(void){
int numberMatrix[20][20];
char num[] = "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48";
int i, j, temp, max=0;
numberMatrix[0][0] = atoi(strtok(num," "));
for(i=0;i<20 font="" i="">20>
for(j=0;j<20 font="" j="">20>
if(i==0&&j==0){continue;}
numberMatrix[i][j]=atoi(strtok(NULL," "));
}
}
for(i=0;i<17 font="" i="">17>
for(j=0;j<20 font="" j="">20>
temp = numberMatrix[i][j]*numberMatrix[i+1][j]*numberMatrix[i+2][j]*numberMatrix[i+3][j];
if(max
}
}
for(i=0;i<20 font="" i="">20>
for(j=0;j<17 font="" j="">17>
temp = numberMatrix[i][j]*numberMatrix[i][j+1]*numberMatrix[i][j+2]*numberMatrix[i][j+3];
if(max
}
}
for(i=0;i<17 font="" i="">17>
for(j=0;j<17 font="" j="">17>
temp = numberMatrix[i][j]*numberMatrix[i+1][j+1]*numberMatrix[i+2][j+2]*numberMatrix[i+3][j+3];
if(max
}
}
for(i=0;i<17 font="" i="">17>
for(j=3;j<20 font="" j="">20>
temp = numberMatrix[i][j]*numberMatrix[i+1][j-1]*numberMatrix[i+2][j-2]*numberMatrix[i+3][j-3];
if(max
}
}
printf("%d\n",max);
}
----------------------------------------------------------------------------------------
저 많은 숫자들을 문자열로 취급하는 건 생각했지만 string 과 stdlib 헤더를 사용해 써야하는 법은 잘 모르겠다. 특히 atoi 와 strtok은 처음 봤다.
atoi()
strtok()
http://forum.falinux.com/zbxe/index.php?document_srl=408129&mid=C_LIB
http://forum.falinux.com/zbxe/?document_srl=408126&mid=C_LIB&sort_index=readed_count&order_type=desc
프로젝트 오일러 11
아래와 같은 20×20 격자가 있습니다.
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
위에서 대각선 방향으로 연속된 붉은 숫자 네 개의 곱은 26 × 63 × 78 × 14 = 1788696 입니다.
그러면 수평, 수직, 또는 대각선 방향으로 연속된 숫자 네 개의 곱 중 최대값은 얼마입니까?
---------------------------------------------------------------------------------
#include#include
#include
void main(void){
int numberMatrix[20][20];
char num[] = "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48";
int i, j, temp, max=0;
numberMatrix[0][0] = atoi(strtok(num," "));
for(i=0;i<20 font="" i="">20>
for(j=0;j<20 font="" j="">20>
if(i==0&&j==0){continue;}
numberMatrix[i][j]=atoi(strtok(NULL," "));
}
}
for(i=0;i<17 font="" i="">17>
for(j=0;j<20 font="" j="">20>
temp = numberMatrix[i][j]*numberMatrix[i+1][j]*numberMatrix[i+2][j]*numberMatrix[i+3][j];
if(max
}
}
for(i=0;i<20 font="" i="">20>
for(j=0;j<17 font="" j="">17>
temp = numberMatrix[i][j]*numberMatrix[i][j+1]*numberMatrix[i][j+2]*numberMatrix[i][j+3];
if(max
}
}
for(i=0;i<17 font="" i="">17>
for(j=0;j<17 font="" j="">17>
temp = numberMatrix[i][j]*numberMatrix[i+1][j+1]*numberMatrix[i+2][j+2]*numberMatrix[i+3][j+3];
if(max
}
}
for(i=0;i<17 font="" i="">17>
for(j=3;j<20 font="" j="">20>
temp = numberMatrix[i][j]*numberMatrix[i+1][j-1]*numberMatrix[i+2][j-2]*numberMatrix[i+3][j-3];
if(max
}
}
printf("%d\n",max);
}
----------------------------------------------------------------------------------------
저 많은 숫자들을 문자열로 취급하는 건 생각했지만 string 과 stdlib 헤더를 사용해 써야하는 법은 잘 모르겠다. 특히 atoi 와 strtok은 처음 봤다.
atoi()
10진 정수 문자열을 정수로 변환합니다.
- 문자열에서 10진 정수 숫자 문자 뒤의 일반 문자는 취소되며, 10진 정수 숫자 문자까지만 숫자로 변환됩니다.
- 10진 정수 숫자 문자 앞의 공백문자는 자동 제거되어 10진 정수 숫자 문자까지만 숫자로 변환됩니다.
- 공백 및 10진 정수 문자가 아닌 문자로 시작하면 0을 반환합니다.
헤더 | stdlib.h | |||
형태 | int atoi(const char *str); | |||
인수 |
| |||
반환 |
|
예제
#include#include int main( void) { printf( "%s = %d\n", "2007" , atoi( "2007" )); printf( "%s = %d\n", "2007forum falinux com" , atoi( "2007forum falinux com" )); printf( "%s = %d\n", "forum falinux com 2007", atoi( "forum falinux com 2007")); printf( "%s = %d\n", " 2007" , atoi( " 2007" )); printf( "%s = %d\n", ".,2007" , atoi( ".,2007" )); printf( "%s = %d\n", "#$2007" , atoi( "#$2007" )); return 0; }
]$ ./a.out
2007 = 2007
2007forum falinux com = 2007
forum falinux com 2007 = 0
2007 = 2007
.,2007 = 0
#$2007 = 0
strtok()
문자열을 문자로 자르는 함수 입니다. 예로, "forum.falinux.com"을 "."으로 자르기를 하면, 함수를 호출할 때 마다 "forum", "falinux", "com"의 선두 번지의 포인터를 반환합니다.
처음에는 자르기 대상인 문자열과 자르기를 위한 문자를 인수로 호출합니다.
strtok( str, sep);
이후에는 문자열 대상을 NULL과 자르기를 위한 문자만 인수로 전달합니다.
strtok( NULL, sep);
더 이상 구할 문자열이 없다면 NULL이 반환됩니다.
*** 주의 ***
strtok()는 잘라 낸 문자열을 구하기 위해 대상 문자열에 NULL을 추가합니다. 즉, 원래의 문자열 내용이 변경 되므로 주의해야 합니다.
헤더 | string.h | |||||
형태 | char *strtok(char *restrict s1, const char *restrict s2); | |||||
인수 |
| |||||
반환 |
|
예제
#include#include int main( void) { char str[] = "forum falinux com"; char *ptr; int ndx; printf( "함수 호출 전: %s\n", str); ptr = strtok( str, " "); printf( "%s\n", ptr); while( ptr = strtok( NULL, " ")) { printf( "%s\n", ptr); } printf( "함수 호출 후: %s\n", str); // 함수 호출 후에는 원본 문자열의 내용이 바뀌므로 주의해야 합니다. printf( "문자열의 변화\n", str); for( ndx=0; ndx < 17; ndx++) printf( "%c %d\n", str[ndx], str[ndx]); return 0; }
]$ ./a.out
함수 호출 전: forum falinux com
forum
falinux
com
함수 호출 후: forum
문자열의 변화
f 102
o 111
r 114
u 117
m 109
0
f 102
a 97
l 108
i 105
n 110
u 117
x 120
0
c 99
o 111
m 109
댓글
댓글 쓰기