2020年6月15日 星期一

黃姓小女紙寫程式~~Week15

Week 15

前提要緊:

因為下下禮拜就要進行這一學期中最重要的程式會考了,所以最近都要努力的爆肝刷題,為了減少時間的浪費,就直接看下面的程式碼吧!!有重要或比較難的才會有註解喔

第一部分

(SOIT106_BASE_009) 基礎題:整數間最大距離 : 輸入3個相異整數,找出整數間最大的距離。   數字範圍:整數1 – 10000  

程式碼:
#include <stdio.h>
int main( ){
int max=0,min=99999,a;
while(scanf("%d",&a)==1){
if(max<a)max=a;
if(min>a)min=a;
}
printf("%d\n",max-min);
}

(SOIT108_Advance_002B) 進階題:三數組合 : 讀入三個 0 - 9 的數字,將其組合成最大的數字,並計算將該數字加1的結果。

程式碼:
#include <stdio.h>
int main( ){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int ans=0;
if(a>=b &&b>=c)ans=a*100+b*10+c;
if(a>=c &&c>=b)ans=a*100+c*10+b;
if(b>=a &&a>=c)ans=b*100+a*10+c;
if(b>=c &&c>=a)ans=b*100+c*10+a;
if(c>=a &&a>=b)ans=c*100+a*10+b;
if(c>=b &&b>=a)ans=c*100+b*10+a;
printf("%d",ans+1);  ///因為題目規定組成最大的數要加一
}

(SOIT108_Base_013A) 基礎題:整數最大值、最小值 : 題目內容:請設計一個程式,該程式可自鍵盤輸入一個由數字所組成字串(註解:空白相隔及非0數字),並由0結尾。例如: 1 2 3 4 5 0 或 23 -31 15 8 0 請在程式中設計一個名為Func的函數(方法),該函數可接受一個如上述的字串並將該字串中所有的整數由小而大重新排列並印出如下所述的結果[最小值,最大值] 當自鍵盤輸入 1 5 4 3 2 0時,會印出 [1,5] 當自鍵盤輸入23 -31 15 8 0時,會印出 [-31,23]

程式碼:
#include <stdio.h>
int main( ){
int max=-99999,min=99999;
while(1){
int now;
scanf("%d",&now);
if(now==0)break;
if(now>max)max=now;
if(now<min)min=now;
}
printf("[%d,%d]",min,max);
}

(SOIT108_Base_012) 基礎題:整數向量相加 : 題目內容:輸入一個整數N,再依序讀入兩筆各有N個整數的向量,輸出此兩筆向量和。數字範圍:整數N範圍 1–10;其他整數1–100 Ex. 5 8 4 10 3 8 10 9 4 4 9  

程式碼:
#include <stdio.h>
int a[20];
int main( ){
int n;
scanf("%d",&n);
for(int i=0;i<n*2;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++){
printf("%d ",a[i]+a[i+n]);
}
}

SOIT108_Base_013) 基礎題:計算一組任意數目的整數的總和 : 題目內容:輸入一組以0為結尾的任意數目的整數(其中只有最後一個整數可以為0)後計算所有輸入的正整數總和(負數不加進總和)。例如: 自鍵盤輸入 1 2 3 4 5 0 將會印出 15 自鍵盤輸入 22 11 44 0 將會印出 77 自鍵盤輸入 33 -2 9 4 55 0 會印出 101  

程式碼:
#include <stdio.h>
int main( ){
int ans=0,a;
while(scanf("%d",&a)==1){
if(a==0)break;
if(a>0)ans+=a;
}
printf("%d",ans);
}

(SOIT106_ADVANCE_012) 進階題:陣列找出現次數 : 讀入一個正整數的數列(逐一輸入正整數,輸入0表示結束,數列至多包含10個整數),之後再讀入一個正整數,程式可以找出該整數出現在數列中的次數。 
數字範圍:正整數 1 – 9 

程式碼:
#include <stdio.h>
int a[15];
int main( ){
for(int i=0;i<15;i++){
scanf("%d",&a[i]);
if(a[i]==0)break;
}
int b,ans=0;
scanf("%d",&b);
for(int i=0;i<15;i++){
if(a[i]==b)ans++;
}
printf("%d\n",ans);
}

(SOIT108_Advance_008) 進階題:10數排序,從大到小排好 : 題目內容:輸入10個數字,把它們從大到小排好。數字範圍:整數1 – 100。  


程式碼:
#include <stdio.h>
int a[10];
int main( ){
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
}
for(int j=0;j<10;j++){
for(int i=0;i<9;i++){
if(a[i]<a[i+1]){
int temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
for(int i=0;i<10;i++){
printf("%d ",a[i]);
}
}

(SOIT108_Advance_007) 進階題:區間測速-超速之王 : 題目內容:龜山區萬壽路1段裝設區間測速器,長度1.2公里,量得10輛車通過的秒數(輸入10個整數),請輸出第幾輛車最快的,並把它的時速印出來(只印整數部分,小數部分無條件捨去)。(時速的單位是每小時幾公里( km/hour)。1小時有60分鐘,1分鐘有60秒,輸入的是秒數) 數字範圍:整數1 – 1000  


程式碼:
#include <stdio.h>
int main( ){
int ansT=9999,ansN=0;
for(int i=1;i<=10;i++){
int nowT;
scanf("%d",&nowT);
if(nowT<ansT){
ansT=nowT;
ansN=i;
}
}
int ans=60*60*1.2/ansT;
printf("%d %d",ansN,ans);
}

第二部分:

接下來剩下最後的幾分鐘,我們來練習新的東西,先輸入連結到小葉老師的openprocessing看老師做的遊戲
連接: bit.ly/P5-color

先從註冊帳號開始


然後就可以開始寫程式,先上google大神搜尋 sprite sheet 的圖片,並且下載下來



1.放上照片


程式碼:
PImage img;
void setup( ){
size(500,500);
img=loadImage("img.jpg");
}
void draw( ){
background(255);
image( img, 0,0);
}

2.因為它是 4X4 所以我們要把照片裁成一個一個


程式碼:
PImage img;
void setup( ){
size(500,500);
img=loadImage("img.jpg");
}
void draw( ){
background(255);
image(  img.get(0,0, 141,211), 0,0 ); ////141為寬 211為長
}

3.按按鍵換左右腳


程式碼:
PImage img;
void setup( ){
size(500,500);
img=loadImage("img.jpg");
}
void draw( ){
background(255);
image(  img.get(141*a,0, 141,211), 0,0);
}
int a=0;
void keyPressed( ){
    a++;
    if(a>=4) a=0;
}

4.按上下左右換邊


PImage img;
void setup( ){
size(500,500);
img=loadImage("img.jpg");
}
void draw(){
background(255);
image(  img.get(141*a,211*b, 141,211), 0,0 );
}
int a=0,b=0;
void keyPressed( ){
if(keyCode==RIGHT) b=3;
if(keyCode==LEFT) b=2; 
if(keyCode==UP)  b=1; 
if(keyCode==DOWN) b=0;
        a++;
         if(a>=4) a=0; 
}

沒有留言:

張貼留言