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);
}
///技巧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:用函式,來簡化程式,不要太多在一起
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; } }
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;
}
}









沒有留言:
張貼留言