플라칸
[C++]스도쿠 풀어주는 프로그램 만드는 과정3(비교) 본문
#include<iostream> using namespace std; void putQ(int a,int b,int c,int *Q); void match33(int a,int b,int c,int *Q); void printsu(int a,int b,int,int *Q); void runwidth(int a,int b,int c,int*Q); int main() { int Q[81]; while(true) { cout<<"select number"<<endl<<"1을 누르고 x좌표, y좌표, 원하는 숫자를 입력하시오."<<endl<<"3을 누를 시 프로그램을 종료합니다."; int a,b,c,d; cin>>d; switch(d){ case 1: cout<<"case 1"<<endl; cin>>a>>b>>c; putQ(a,b,c,&Q[0]); printsu(a,b,c,&Q[0]); break; case 2: cout<<"case 2"<<endl; cin>>a>>b; printsu(a,b,c,&Q[0]); break; case 3: cout<<"case 3"<<endl; return 0; } //s } return 0; } void putQ(int a,int b,int c,int *Q) { int *W=Q; Q=Q+a*9+b; *Q=c; Q=W; /*delete Q,W; free Q,W;*/ return; //sdfsdfsdfsdfds } void match33(int a,int b,int c, int *Q) { return; } void printsu(int a,int b,int,int *Q) { cout<<*(Q+a*9+b); //delete Q; return; } void runwidth(int a,int b,int c,int*Q) {
return; } |
오늘은 여기에서 match33의 함수를 완성시켜보자.
match33함수는 3x3칸 내에 같은 숫자가 있는지 검사하는것이다.
먼저 9번 실행시켜주는 for문이 있어야한다.
for(int d=0,d<9,d++)
그뒤 Q함수의 위치와 비교할 함수의 위치와 같으면 안되므로
if(a==e)if(b==f)continue; 함수를 넣어주자 a와 b는 Q함수의 좌표, e와 f는 비교할 함수의 좌표를 말하는것이다.
이제 e와 f를 정의해주자
int e=d/3; int f=d%3;으로 해주자
if(*(Q+a*9+b)==*(Q+e*9+f))로 똑같은것을 검사한다.
void match33(int a,int b,int c, int *Q) { for(int d=0;d<9;d++) { int e=d/3; int f=d%3; if(a==e)if(b==f)continue; if(*(Q+a*9+b)==*(Q+e*9+f))cout<<"같은것이 있습니다!!\n"; } return; } |
아직 끝난것이 아니다. e와 f는 이제 3x3칸 이내에 있는 수만 지정할것이다.
e와 f를 좀 더 수정해준다.
int e=a/3+d/3; int f=b/3+d%3;로 수정해주었다.
case 3:
match33(a,b,c,&Q[0]);로 수정해주고 컴파일한다
#include<iostream> using namespace std; void putQ(int a,int b,int c,int *Q); void match33(int a,int b,int c,int *Q); void printsu(int a,int b,int,int *Q); void runwidth(int a,int b,int c,int*Q); int main() { int Q[81]; while(true) { cout<<"select number"<<endl<<"1을 누르고 x좌표, y좌표, 원하는 숫자를 입력하시오."<<endl<<"3을 누를 시 프로그램을 종료합니다."; int a,b,c,d; cin>>d; switch(d){ case 1: cout<<"case 1"<<endl; cin>>a>>b>>c; putQ(a,b,c,&Q[0]); printsu(a,b,c,&Q[0]); break; case 2: cout<<"case 2"<<endl; cin>>a>>b; printsu(a,b,c,&Q[0]); break; case 3: cout<<"case 3"<<endl; match33(a,b,c,&Q[0]); break; case 4: cout<<"case 4"<<endl; return 0; } //s } return 0; } void putQ(int a,int b,int c,int *Q) { int *W=Q; Q=Q+a*9+b; *Q=c; Q=W; /*delete Q,W; free Q,W;*/ return; //sdfsdfsdfsdfds } void match33(int a,int b,int c, int *Q) { for(int d=0;d<9;d++) { int e=a/3+d/3; int f=b/3+d%3; if(a==e)if(b==f)continue; if(*(Q+a*9+b)==*(Q+e*9+f))cout<<"같은것이 있습니다!!\n"; } return; } void printsu(int a,int b,int,int *Q) { cout<<*(Q+a*9+b); //delete Q; return; } void runwidth(int a,int b,int c,int*Q) {
return; } |
잘 작동한다.
'정보보호전문가가 되자!' 카테고리의 다른 글
[C++]스도쿠 풀어주는 프로그램 만드는 과정2 (0) | 2018.10.02 |
---|---|
[C++]포인터의 개념 및 정리 (0) | 2018.10.01 |
[C++]스도쿠 풀어주는 프로그램 만드는 과정1 (0) | 2018.09.28 |
여태까지의 메모중 일부 (0) | 2018.09.26 |
2018 09월 26일날의 경과 (0) | 2018.09.26 |