2017年12月10日

老鼠走迷宮

#include 
#include 
#define N 100

typedef struct{
  int row,col,dir;
}locate;

typedef struct{
  int horiz,vert;
}offsets;

int Top=-1;                                   /* 初始堆疊頂端 */
locate Stack[N];

offsets move[4]={
  [0]={ .horiz=0,   .vert=-1},    //N
  [1]={ .horiz=1,   .vert=0},     //E
  [2]={ .horiz=0,   .vert=1},     //S
  [3]={ .horiz=-1,  .vert=0}      //W
};

void Push(locate);
locate Pop();
void PrintStack();

int main()
{
    int mrows,mcols,exitrow,exitcol,i,j,row,col,dir=0;
    locate position;

    scanf("%d %d",&mrows,&mcols);           /* Input maze size m*n */
    scanf("%d %d",&exitrow,&exitcol);       /* Input exitrow exitcol */
    int maze[mrows+2][mcols+2];
    int mark[mrows+2][mcols+2];             /* Record Visited position in mark array */

    for(i=0;i<mrows+2;i++)                  /* Initial maze and mark array */
    {
      for(j=0;j<mcols+2;j++)
        {
          mark[i][j]=0;                                 /* Initial mark array to 0 */
          if(i==0 || i==mrows+1 || j==0 || j==mcols+1)  /* if row=0 or row=last row col=0 or col=last col set maze[i][j]=1 be wall */
            maze[i][j]=1;
          else
            scanf("%d",&maze[i][j]);                    /* else input maze data*/
        }
    }

    printf("\n===== 顯示迷宮 =====\n");
    for(i=0;i<mrows+2;i++)
    {
      for(j=0;j<mcols+2;j++)
      {
        if(maze[i][j]==1)
          printf("█");
        else
          printf(" ");
      }
      printf("\n");
    }
    //printf("\n");
    int entr_ROW=1,entr_COL=1;                 /* Set maze entraence(1,1) */
    int next_ROW,next_COL;                     /* next position */

    Top=0;                                     /* push entrance to Stack */
    Stack[0].row=entr_ROW;
    Stack[0].col=entr_COL;
    Stack[0].dir=dir;
    mark[entr_ROW][entr_COL]=1;
    //PrintStack();

    while(Top > -1)
    {
      position=Pop();                          /* pop position from Stack */
      row=position.row;
      col=position.col;
      dir=position.dir;
      //printf("%d %d %d\n",row,col,dir);

      while(dir<4)
      {
        next_ROW=row+move[dir].vert;
        next_COL=col+move[dir].horiz;
        //printf("%d %d %d",next_ROW,next_COL,dir);//break;

        if(next_ROW==exitrow && next_COL==exitcol)
        {
            //mark[next_ROW][next_COL]=1;
            position.row=row;
            position.col=col;
            position.dir=dir;
            Push(position);

            printf("\n===== 顯示迷宮路徑 =====\n");

            for(i=Top;i>=0;i--)
            {
              maze[Stack[i].row][Stack[i].col]=3;
              //printf("%d %d %d\n",Stack[i].row,Stack[i].col,Stack[i].dir);
            }


            for(i=0;i<mrows+2;i++)
            {
              for(j=0;j<mcols+2;j++)
              {
                if(maze[i][j]==0)
                  printf(" ");
                else if(maze[i][j]==1)
                  printf("█");
                else
                  printf("○");
              }
              printf("\n");
            }

            return 0;
        }
        else if(maze[next_ROW][next_COL]==0 && mark[next_ROW][next_COL]==0)
        {
            mark[next_ROW][next_COL]=1;

            position.row=row;
            position.col=col;
            position.dir=dir;
            Push(position);     /* Save the current position */

            row=next_ROW;       /* Specify the next position */
            col=next_COL;
            dir=0;              /* Zero the direction */
        }
        else
            dir++;
      }

    }
   printf("迷宮沒有出口!\n");

   return 0;
}

void Push(locate item)
{
  if(Top==(N-1))
  {
    printf("= Stack full ! =\n");
  }
  else
  {
    //Top=Top+1;
    Stack[++Top]=item;
  }
}

locate Pop()
{
  if(Top==-1)
  {
    printf("= Stack empty ! =\n");
  }
  else
  {
    return Stack[Top--];
  }
}

void PrintStack()
{
  int i;
  if(Top==-1)
  {
    printf("堆疊是空的!\n");
  }
  else
  {
    printf("= Stack contain : =\n");
    for(i=Top;i>=0;i--)
      printf("%d %d %d\n",Stack[i].row,Stack[i].col,Stack[i].dir);
    printf("\n");
  }
}

2017年10月17日

配合排程使用 forfiles 刪除指定檔案

刪除指定的檔案
forfiles /p c:\02FirefoxPortable /s /m *.dll /c "cmd /c erase @path"
forfiles /p c:\02FirefoxPortable /s /m *.chk /c "cmd /c erase @path"
配合排程

2017年9月6日

C_MM29- 最大質數問題

問題描述:試撰寫一個程式,可輸入一個整數,並找出小於此數的最大質數。
輸入說明輸入一個正整數。
輸出說明:輸出最大質數。

#include <stdio.h>  
#include <stdlib.h>  
  
int main()  
{  
    int x,i,j;  
    int isp=0;  
  
    scanf("%d",&x);  
  
    for(i=x-1;i>0;i--)  
    {  
      for(j=2;j<i;j++)  
      {  
        isp=1;  
        if(i%j==0)  
          {  
            isp=0;  
            break;  
          }  
      }  
  
      if(isp==1)  
      {  
        printf("%d\n",i);  
        break;  
      }  
    }  
     return 0;  
} 

C_MM20-十進位轉十六進位

題目描述:
十進位轉十六進位
輸入說明:
輸入一個十進位的整數
輸出說明:
把輸入的數轉為十六進位輸出
#include <stdio.h>  
#include <stdlib.h>  
  
int main()  
{  
    int num,rem,i=0;  
    int ans[99];  
    char a16[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};  
    scanf("%d",&num);  
  
    while(num>0)  
    {  
      rem=num%16;  
      num=num/16;  
  
      ans[i]=rem;  
      i++;  
    }  
  
    while(i>0)  
    {  
      i--;  
      printf("%c",a16[ans[i]]);  
    }  
    printf("\n");  
    return 0;  
} 

C_MM09-計算 i 次方的值

問題描述:
請撰寫一個程式,計算2的 i次方的值。(提示:利用位移運算元)
輸入說明:
輸入一個正整數,i的值小於31。
輸出說明:
輸出 的i次方的值。
若 i > 31 輸出 "Value of more than 31"


#include <stdio.h>  
#include <stdlib.h>  
  
int main()  
{  
    int i,a,sum=1;  
    scanf("%d",&a);  
    if(a<31)  
        {  
            for(i=0;i<a;i++)  
            {  
                sum=sum*2;  
            }  
            printf("%d\n",sum);  
        }  
    else  
        {  
            printf("Value of more than 31\n");  
        }  
  
    return 0;  
}  

C_MM03-兩數總和

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a,b,sum;
    while(scanf("%d %d",&a,&b)!=EOF)
    {
       sum=a+b;
       printf("%d\n",sum);
    }

    return 0;
}

2017年9月5日

質數判別

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n;
    int i,isp;

    scanf("%d",&n);
    for(i=3;i<n;i++)
    {
      isp=1;
      if(n%i==0)
      {
        isp=0;
        break;
      }
    }
    if(isp==1)
      printf("YES\n");
    else
      printf("NO\n");

    return 0;
}