//아래거는 02버전..ㅎ
//03은 [8][8] 진짜 문제 푼거
#include<stdio.h>
#include<conio.h>
#define X 3
#define Y 4
#define CNT 200
int allCnt[CNT];
int a[X][Y] = {
{-1,0,-1,0},
{0,-1,0,-1},
{-1,-1,0,0}
};
void back(int x, int y);
int chek2(int x, int y);
void display();
int getX1(int x,int y);
int getX2(int x,int y);
int getY1(int x,int y);
int getY2(int x,int y);
int getCnt();
int main(){
int i,max=0,count=0;
back(0,0);
for(i=0 ; i<CNT ; i++){
if(allCnt[i]>max)max=allCnt[i];
// printf("%d",allCnt[i]);
}
for(i=0 ; i<CNT ; i++)
if(allCnt[i]==max)count++;
printf("최대 총잡이수 : %d , 그 경우의 수 : %d",max,count);
getch();
return 0;
}
void back(int x, int y){
int i,j,k;
static int cnt = 0;
if(x==X-1 && y==Y){return;}
if(y>Y-1){y=0;x++;}
for(i=x ; i<X ; i++){
if(i==x){k=y;}else k=0;
for(j=k ; j<Y ; j++){
if(chek2(i,j)==1 && a[i][j]!=-1){
printf("%d\n",cnt);
a[i][j]=9;
allCnt[cnt++]=getCnt();
printf("...................%d\n",getCnt());
display();
back(i,j+1);
a[i][j]=0;
}
}
}
}
int chek2(int x, int y){
int i;
int x1 = getX1(x,y);
int x2 = getX2(x,y);
int y1 = getY1(x,y);
int y2 = getY2(x,y);
for(i=y1 ; i<y2 ; i++)
if(a[x][i]==9)
return 0;
for(i=x1 ; i<x2 ; i++)
if(a[i][y]==9)
return 0;
return 1;
}
void display(){
int i,j;
for(i=0 ; i<X ; i++){
for(j=0 ; j<Y ; j++){
if(a[i][j]==0){
printf(" .");
}else if(a[i][j]==-1){
printf(" #");
}else
printf(" !");
}
printf("\n");
}
printf("\n");
}
int getY1(int x,int y){
for(int i=y ; i>0 ; i--){
if(a[x][i]==-1)
return i;
}
return 0;
}
int getY2(int x,int y){
for(int i=y ; i<Y ; i++){
if(a[x][i]==-1)
return i;
}
return Y;
}
int getX1(int x,int y){
for(int i=x ; i>0 ; i--){
if(a[i][y]==-1)
return i;
}
return 0;
}
int getX2(int x,int y){
for(int i=x ; i<X ; i++){
if(a[i][y]==-1)
return i;
}
return X;
}
int getCnt(){
int cnt=0;
for(int i=0 ; i<X ; i++)
for(int j=0 ; j<Y ; j++)
if(a[i][j]==9)cnt++;
return cnt;
}
package demo;
public class demo {
public static void main(String[] args) {
demo dm = new demo();
int max = 5001;
int[] no = new int[max];
for(int i=0 ; i<max ; i++){
no[i]=i;
}
//제너레이팅을 가지는 배열 0이면 제너레이팅되는수가있음 숫자가 있으면
//제너레이팅 되는숫자 없음
for(int i = 0 ;i<max ; i++){
int gIndex = dm.getG(i);
if(gIndex<5001)
no[gIndex] = 0;
}
//제너레이팅 안되는 숫자 더하고 출력
int sum = 0;
for(int i = 1 ; i<max ; i++){
if(no[i]!=0)
System.out.println(i);
sum = sum+no[i];
}
System.out.println(sum);
}
int getG(int i){
int g = i;
int n=0;
while(i>9){
n=i%10;
i=i/10;
g=g+n;
}
g=g+i;
return g;
}
}
UltraVNC-102-Setup.exe
back03.cpp

