새로운 시작

uvnc

분류없음 2008/06/25 11:00
uvnc원격제어프로그램
Posted by 나는나에요

//아래거는 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;
}

Posted by 나는나에요

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;
 }

}

Posted by 나는나에요