2020年6月15日 星期一

黃姓小女紙寫程式~~Week16

Week 16

一部分:瘋狂程式練習

(SOIT108_Advance_011) 進階題:秒數換算 : 題目內容:輸入總秒數(介於0~80000 之間的整數),將其轉換成時:分:秒格式。數字範圍:秒數範圍0~80000 

程式碼:
#include <stdio.h>
int main( ){
int t;
scanf("%d",&t);
printf("%02d:%02d:%02d",t/60/60,t/60%60,t%60%60); ///因為要有0幾
}
(SOIT108_Advance_014B) 進階題:拆解輸入的正整數 : 題目內容:輸入一個不大於20000的正整數後,依據下述要求印出其結果,例如: EX1. 自鍵盤輸入 153 將會印出 3 50 100 EX2. 自鍵盤輸入 12345 將會印出 5 40 300 2000 10000 EX3. 自鍵盤輸入 1503 將會印出 3 0 50 100  


程式碼:
#include <stdio.h>
int main( ){
int n;
scanf("%d",&n);
for(int i=1;n>0;i*=10){
int now=n%10;
printf("%d ",now*i);
n/=10;
}
}
(SOIT108_Base_011) 基礎題:平面兩座標的面積 : 題目名稱:平面兩座標的面積 (題目修改) (BACIC) 題目內容:輸入平面兩點座標的四個整數值(x1,y1,x2,y2),計算並顯示這兩點所圍之面積。(EX.輸入(x1,y1,x2,y2),計算(x1,y1)、(x1,y2)、(x2,y2)、(x2,y1)所圍面積。) 數字範圍:整數1 –100  

程式碼:
#include <stdio.h>
int main( ){
int x,y,x2,y2;
scanf("%d%d%d%d",&x,&y,&x2,&y2);
int ans=(x2-x)*(y2-y);
if(ans<0)ans=-ans;
printf("%d",ans);
}
(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 a,ans=0;
while(scanf("%d",&a)==1){
if(a>0)ans+=a;  ///不加小於正數的
}
printf("%d",ans);
}
(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 a,small=99999,big=0;
while(scanf("%d",&a)==1){
if(a>big)big=a;
if(a<small)small=a;
}
printf("[%d,%d]",small,big);
}
(SOIT108_Advance_014) 進階題:計算級數的值 : 題目內容:定義級數 f(n)=1+3+5+...+(2*n+1) 例如: f(1)=1+3=4 f(2)=1+3+5=9 f(3)=1+3+5+7=16 f(4)=1+3+5+7+9=25; f(5)=1+3+5+7+9+11=36 請完成一個程式的設計,使得當使用者自鍵盤輸入一個小於1520的任意正整數n時,會印出f(n)的值,輸出範例如下: 當自鍵盤輸入4時,會印出 f(4)=25 當自鍵盤輸入5時,會印出 f(5)=36  


程式碼:
#include <stdio.h>
int main( ){
int a,ans=1;
scanf("%d",&a);
for(int i=1;i<=a;i++){
ans+=2*i+1;
}
printf("f(%d)=%d",a,ans);
}
(SOIT108_Advance_010) 進階題:億萬富翁 : 題目內容:有一個富翁的財產超過一萬億,所以常常搞不清楚財產到底有多少,現在輸入一個整數N表示富翁的財產總額,請您幫他在財產總額上,從後方每三位加一個逗號,方便閱讀。數字範圍:整數N範圍 為 1000000000000 – 999000000000000。  

程式碼:
#include <stdio.h>
#include <string.h>
char a[1000];
int main( ){
scanf("%s",a);
int N=strlen(a);
for(int i=0;i<N;i++){
if((N-i)%3==0&&i!=0)printf(",");
printf("%c",a[i]);
}
}

第二部分:P語言

延續上禮拜的小人程式碼,有不懂的請看 Week15,我們要改讓它可以不用按按鍵就可以動腳
1.

程式碼:
PImage img;
void setup( ){
size(500,500);
img=loadImage("img.jpg");
}
int a=0; ///a是動作
void draw( ){
background(255);
image(  img.get(141*a,0, 141,211), 0,0);
a = (a+1)%4;  ///一秒動60次
}
2.改良上面動太快的問題

程式碼:
PImage img;
void setup( ){
size(500,500);
img=loadImage("img.jpg");
}
int a=0;
void draw( ){
background(255);
//image( img, 0,0);
image(  img.get(141*a,0, 141,211), 0,0);
if(frameCount%30==0) a = (a+1)%4;  ///為了慢一點
}

沒有留言:

張貼留言