2020年5月22日 星期五

Week13C/C++ 瘋狂程設進階vs. CPE一顆星題 、AngryBirds

W13-01 C/C++ 瘋狂程設進階vs. CPE一顆星題 

一、函數反序排列數字

(1)剝皮法

(2)吹氣放大法


二、2進位轉10進位

剝皮法->組合2進位

三、 CPE一顆星題 

Digit Generator題目

 先把簡單的架構寫出來

 題目是要反過來的->用暴力去試
增加genBig函式 : 剛剛學的剝皮法 !
ans = n + 取餘數後的每個各數 + . . . +到第1位數

執行結果 : 
~程式碼~
///技巧1:看sample Input/Output,有幾筆
///     把題目的迴圈寫出來
///技巧2:找答案的關係
///     找關鍵字ctrl+F:generator
///技巧3:什麼是 generator?
///技巧4:題目反過來問,小->大(簡單),倒過來問->(難)
///     暴力去試: N 試1,2,3,4,...,N 都試一遍 小->大
///技巧5:generator把小的i->大的
///技巧6:用"函式"來簡化程式碼
#include <stdio.h>
int genBig(int n)
{
    int ans=n;
    while(n>0){///剝皮法
        ans+=n%10;
        n/=10;
    }
    return ans;
}
int main()
{
    int T;///Test Case有幾筆資料
    scanf("%d",&T);
    for(int t=0;t<T;t++)
    {
        int N,ans=0;
        scanf("%d",&N);
            for(int i=0;i<=N;i++){
                if(genBig(i)==N){
                    ans=i;
                    break;
                }
            }
        printf("%d",ans);
    }
}

W13-02AngryBirds

拉進angrybird跟pig的圖片
會存放在data裡面

 增加mouse點下去可以拉線,放開時彈出去


 彈出去 : 舊的座標-新的座標/10

會彈出視窗,所以要限制他不能超出框框

可以反彈回來
~程式碼~
PImage imgBird;
void setup(){
  size(500,500);
  imgBird = loadImage("bird.png");
  imageMode(CENTER);///
}
float birdX=0,birdY=0,oldX=0,oldY=0,vx=0,vy=0;
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;
}
void mousePressed()
{
  if(dist(mouseX, mouseY, birdX, birdY)<50){
    bMoving=true;
    oldX = birdX ; oldY=birdY;
  }
}
void mouseDragged()
{
  if(bMoving){
    birdX = mouseX;birdY=mouseY;
  }

}



沒有留言:

張貼留言