2020年5月22日 星期五

正課 Week 13_07166046

瘋狂程設題練習

1.反序數字 - 進階題


技巧一 : 剝皮法 %10取餘數

#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
while(n>0){                    //如果n還有剩下,不為0
int now= n%10;            //剝皮取餘數
n/= 10;
printf("%d", now);
}
printf("\n");
}



技巧二 : 組合成數字 (吹氣球)


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

ans*=10;                           //吹氣放大
ans+= now;                      //空洞,塞答案
}
printf("%d\n", ans);

}






-----------------------------------------------


2.二進位轉十進位 - 進階題
技巧一 : 剝皮 %10, 固定剝4次, 再組合


#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= n4*8+ n3*4+ n2*2+ n1*1;     //轉換成10進位
printf("%d\n", ans);

}







------------------------------------------------




CPE : UVA 1583
技巧 : 先看 input/output 關聯, 再找關鍵字








#include <stdio.h>
int main()
{
    int T;
    scanf("%d", &T);
    
    for(int t=0;t<T;t++){
        int N;
        scanf("%d", N);
        
        printf("%d\n", ans)
        
    }
    
}


技巧 : generator 觀察題目後發現 
ex : 256= 254+2+5+4
--> 256 是 254 的 generator

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













-------------------------------------------------------



憤怒鳥





PImage imgBird;
void setup(){
  size(500,400);
  imgBird= loadImage("bird.png");
  imageMode(CENTER);
}
void draw(){
 background(255);
 image(imgBird, mouseX, mouseY, 100,100);
}










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變數) 成立or不成立
void draw(){
 background(255);   //背景要清,不要殘影
 image(imgBird, birdX, birdY, 100,100); //鳥大小100*100
 if(bMoving) line(mouseX, mouseY, oldX,oldY);
}//如果有點到,再拉動與畫線
void mousePressed(){ //判斷有沒有滑鼠壓到鳥
 if(dist(mouseX, mouseY, birdX, birdY)<50){ //距離夠近
 bMoving= true; //開始移動bird
 oldX= birdX; oldY= birdY; //等一下拉線用的
 }
}
void mouseDragged(){
 if(bMoving){  //如有點到,開始移動bird
  birdX= mouseX; birdY= mouseY; 
 }

}










PImage imgBird;
void setup(){
  size(500,400);
  imgBird= loadImage("bird.png");
  imageMode(CENTER);
}
float birdX= 100, birdY= 300, oldX, oldY, 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; 
 }

}










---------------------------------------------------




沒有留言:

張貼留言