2020年5月28日 星期四

黃姓小女紙寫程式~~Week13

Week 13

(SOIT106_ADVANCE_009) 進階題:函數反序排列數字 : 設計一個函數f(n),該函數可以傳回整數n的數字反序排列所組成的整數。  數字範圍:整數 1 – 9999 (不含10的倍數)  

程式碼簡單版: 這題是一個一個從後面開始印

           #include <stdio.h>
           int main( ){
int n;
scanf("%d",&n);
while(n>0){
int ans=n%10;
n/=10;
printf("%d",ans);
}
printf("\n");
          }

程式碼完整版: 完整的是從後面答案一個一個加到ans去,在一次印出ans


           #include <stdio.h>
           int main( ){
int n;
scanf("%d",&n);
int ans=0;
while(n>0){
int now=n%10;
n/=10;
ans*=10;
ans+=now;
}
printf("%d\n",ans);
           }

2.(SOIT106_ADVANCE_011) 進階題:2進位轉10進位 : 讀入一個0000 ~ 1111的2進位整數(固定4位數),請顯示出對應的10進位數字。 數字範圍:0000 – 1111 

程式碼: 

         #include <stdio.h>
         int main( ){
int n;
scanf("%d",&n);
int n1=n%10;
int n2=(n/10)%10;
int n3=(n/100)%10;
int n4=(n/1000)%10;
int ans=n1*1+n2*2+n3*4+n4*8;
printf("%d\n",ans);
         }

3.CPE題目

技巧大全:


///技巧1:看sample Input Ouput ,有幾筆 把程式碼的迴圈寫出來
///技巧2:找關係/答案 Q:I=>Output,How??
               在PDF檔裡,找Input/Ouput解釋,找到關鍵字:generator
///技巧3:什麼是generator?245+2+4+5 =>256
///技巧4:反過來問,好難...小=>大(簡單),倒過來問(難)
               暴力去試:N試1,2,3,4...N全部試 小=>大
///技巧5:generatpr 把小的i=>大的
///技巧6:用函式,來簡化程式,不要太多在一起 

程式碼:

#include <stdio.h>
int genBig(int n){ ///技巧6:用函式,來簡化程式,不要太多在一起
    int ans=n;
    while(n>0){
        ans+=n%10;  ///用剝皮法,把每一位數加進來
        n/=10;  ///剩下的越來越少
    }
    return ans;
}
int main()
{
    int T; ///測試資料有幾筆
    scanf("%d",&T);
    for(int t=0;t<T;t++){
        int N;
        scanf("%d",&N);
        int ans=0;  ///for迴圈前面,還不知道答案
        for(int i=1;i<=N;i++){  ///技巧4:暴力去試,看誰是對的
            if(genBig(i)==N){  ///小的i=>大的,剛好就是N找到答案
                ans=i;   ///for迴圈中間,找到答案
                break;
            }
        }
        printf("%d\n",ans); ///for迴圈後面,把答案拿來用
    }
}

4.憤怒鳥: 現在進入本日的高潮,憤怒鳥的部分!!!

元素:
bird.png
pig.gif

4-1首先做出一隻滑鼠指到哪裡,鳥就到哪裡的程式碼,但是不完整喔! 上禮拜有略教過,但要下課了所以應該沒什麼在聽哈哈哈哈,所以再看一次吧。

程式碼:

      PImage imgBird ;
      void setup( ){
          size(500,400);
          imgBird = loadImage("bird.png");
          imageMode(CENTER);  ///以中心點為座標
      }
      void draw( ){
          background(255);
          image(imgBird,mouseX,mouseY,100,100); ///這邊會跟著箭頭移動
      }

4-2.跟上面差不多,改成按下拖曳會有線,但沒有設定放掉,一樣不完整。

程式碼:

         PImage imgBird ;
         void setup( ){
             size(500,400);
             imgBird=loadImage("bird.png");
             imageMode(CENTER);  ///
         }

         float birdX=100,birdY=300, oldX , oldY;
         boolean bMoving=false; // if(boolean變數)移動成立或者不成立

         void draw( ){
             background(255);
             image(imgBird,birdX,birdY,100,100); ///不要用滑鼠到哪,圖片就到哪
             if(bMoving) line(mouseX,mouseY,oldX,oldY);  ///如果有點到,在拉動,畫線!!!
         }
         void mousePressed( ){ 
             if(dist(mouseX,mouseY,birdX,birdY)<50){  ///距離夠近
                bMoving = true; ///開始移動
                oldX=birdX;oldY=birdY; ///等一下拉線用的
             }
         }
         void mouseDragged( ){ //拖曳時
             if(bMoving){ ///如果有點到,要開始移動
                birdX=mouseX;birdY=mouseY; 
             }
          }

4-3 完整版,拉然後射出去

程式碼:

         PImage imgBird ;
         void setup( ){
             size(500,400);
             imgBird=loadImage("bird.png");
             imageMode(CENTER);
         }

          float birdX=100,birdY=300,oldX,oldY,vx=0,vy=0; ///vx,vy表移動的速度
          boolean bMoving=false;

          void draw( ){
              background(255);  ///背景要清,不要殘影
              image(imgBird,birdX,birdY,100,100);
              if(bMoving) line(mouseX,mouseY,oldX,oldY);
              birdX+=vx;birdY+=vy;

              if(birdX>500-50 || birdX<50) vx=-vx;
              if(birdY>400-50 || birdY<50) vy=-vy;  ///反彈
          }
          void mouseReleased( ){ ///如果放開的時候
              bMoving =false; ///不在拉動,要彈出去懂嗎!!
              vx=(oldX-mouseX)/10;vy=(oldY-mouseY)/10;   ///就的座標減新座標移動距離除以10
           }
           void mousePressed( ){
               if(dist(mouseX,mouseY,birdX,birdY)<50){
                  bMoving =true; ///開始移動鳥
                  oldX=birdX;oldY=birdY;
               }
            }
            void mouseDragged( ){
                if(bMoving){
                   birdX=mouseX;birdY=mouseY; 
                }
             }

沒有留言:

張貼留言