發表文章

目前顯示的是 10月, 2020的文章

【科普】Syd地科小教室(1):雲與雨,認識低雲族

圖片
雨:天上的雲為甚麼有時候多,有時候少呢? Syd:雨,你知道雲是甚麼嗎? 雨:雲,雲是甚麼? Syd:雲會做甚麼事呢? 雨:嗯,雲……會下雨。 Syd:對。你就是這樣來的。雲是由高空中的水氣和冰晶等組成的。 雨:哇。那所以天上的水氣、冰晶也有時候多,有時候少嗎?這些東西不在天上會在哪裡? Syd:嗯,像下雨的時候,就是因為水氣、冰晶累積太多了,所以變得很重,就往地面掉了。 雨:哇。那如果一直下雨,一直有我被製造出來,天上不就沒有雲了嗎? Syd:並不會一直下雨喔!因為雨下到一定的程度,太重的雲被下完了減肥了,就不會再下了。而且天上的水也會有累積的方法。像是天氣熱的時候,地面水體比如說湖泊、海洋會蒸發水分到天空中, 這樣降水、蒸發的動態過程就是所謂水循環的過程 。 雨:哇,原來如此。那天上的雲為甚麼有不同的大小形狀呢? Syd:大小的話,雨你想想,當我離你近一點,是不是看起來就比較大隻?離你遠一點是不是就看起來變小了?雲也是這樣子的。你看到比較大的雲,就是離我們地面比較近的雲。 雨:這樣呀。那形狀呢? Syd:形狀,影響雲的形狀生成的因素太多了,畢竟天上不是靜態的。可能有像是風的影響。我們要不要來認一下雲? 雨:好啊! 圖(一) 積雲 Cumulus (圖片來源:Pixabay) Sydney:我們先從離我們近的,比較大的開始。像是這個, 一朵一朵很大朵 的就是 積雲 。 雨:嗯。那這張也是積雲囉! 圖(二) 層積雲 Stratocumulus (圖片來源:Pixabay) Syd:你為什麼認為他是積雲呢? 雨:因為它也是一朵一朵很大朵的啊! Syd:嗯,但是雨,你有沒有發現它朵跟朵之間是連在一起的呢? 雨:對耶。所以它不是積雲嗎? Syd:它很像積雲,但是這種 像是大朵積雲連在一起綿延不絕 (好長的形容)就是 層積雲 喔! 雨:噢。是這樣呀! Syd:雨,你看看這張圖。 圖(三) 層雲 Stratus (圖片來源:尤柏澂 提供) 雨:這也是雲嗎?好霧,這該不會是空汙吧? Sydney:這是雲。它叫做 層雲 ,特點就是 如霧一般,不容易看出它所謂的形狀 。 雨:真的嗎?原來這不是空氣汙染。 Sydney:當然霧霧的也有可能是空氣汙染,不一定呢。 本篇介紹專有名詞: 水循環 、 積雲(Cu) 、 層積雲(Sc) 、 層雲(St) 。

【程式解題】ZeroJudge a215明明愛數數 C++解法(逐行註解)

C解法請點此 #include <iostream> using namespace std; int main(){ int i; //loop int n; //從 n 開始數   int m; //總和會超過 m int sum; //總和 int count; //數了幾個數字 while(cin>>n>>m){ sum=0; //總和歸零 for(i=0;i<1000000000;++i){ sum+=n+i;                               //從n開始數,數一個就加到sum裡 if(sum>m){ //如果sum>m count=i+1; //記錄數了幾個 break; //跳出迴圈 } } cout << count << "\n"; //輸出 } return 0; }

【程式解題】2019年11月TOI練習賽新手組 - 多項式計算 (Polynomial) C解法

題目請點此 程式碼: #include <stdio.h> #include <stdlib.h> int main(){ int i,j,x=0; int n1,n2; long tmp; long poly1[2][1001]={0}; long poly2[2][1001]={0}; long sum[2][1001]={0}; scanf("%d",&n1); for(i=0;i<n1;++i){ scanf("%ld",&poly1[0][i]); scanf("%ld",&poly1[1][i]); } scanf("%d",&n2); for(i=0;i<n2;++i){ scanf("%ld",&poly2[0][i]); scanf("%ld",&poly2[1][i]); } for(i=0;i<=1000;++i){ sum[0][i]=i; } for(i=0;i<=1000;++i){ for(j=0;j<n1;++j){ if(poly1[0][j]==sum[0][i]){ sum[1][i]+=poly1[1][j]; break; } } for(j=0;j<n2;++j){ if(poly2[0][j]==sum[0][i]){ sum[1][i]+=poly2[1][j]; break; } } } for(i=1000;i>=0;--i){ if(sum[1][i]){ printf("%ld:",sum[0][i]); printf("%ld\n",sum[1][i]); }else{ ++x; } } if(x==1001) printf("NULL!"); system(

【程式解題】2019年4月TOI練習賽新手組 - 滿意度調查 (Survey of Satisfaction) C解法(註解版)

題目請點此 程式碼: #include <stdio.h> #include <stdlib.h> #define SWAP(x,y,t)(t=x,x=y,y=t) int main(){ int i,j; //loop long tmp; //用在排序的SWAP long long  n; //input long survey[2][10]={0}; //各滿意度分數儲存 scanf("%lld",&n); for(i=0;i<10;++i){ survey[0][i]=i; //把分數存進survey[0][i] } while(n){ switch(n%10){ //把各分數的個數存進陣列survey[1][] case 0: ++survey[1][0]; break; case 1: ++survey[1][1]; break; case 2: ++survey[1][2]; break; case 3: ++survey[1][3]; break; case 4: ++survey[1][4]; break; case 5: ++survey[1][5]; break; case 6: ++survey[1][6]; break; case 7: ++survey[1][7]; break; case 8: ++survey[1][8]; break; case 9: ++survey[1][9]; break; } n/=10; }         //bubble sort,由個數少到多 for(i=9;i>=1;--i){      for(j=1;j<=i;++j){ if(survey[1][j-1]>survey[1][j]){ SWAP(survey[0][j-1],survey[0][j],tmp);

【程式解題】2019年5月TOI練習賽新手組 - 第2題 座位安排(Seats) C解法

  題目請點此

【程式解題】ZeroJudge - a015矩陣的翻轉 C解法(詳細解說)

解法推導: 例如說有個矩陣A:(括弧太小就不打了) 1 2 3  4 5 6 翻轉後會變這樣: 1 4 2 5 3 6 也就是說原本是這樣儲存的: M[0][0]=1,M[0][1]=2,M[0][2]=3 M[1][0]=4, M[1][1]=5, M[1][2]=6 輸出的順序是: M[0][0]→ M[1][0] → M[0][1] → M[1][1] → M[0][2] → M[1][2]。 很容易就看的出來,其實就是以下程式碼裡把i、j交換的做法。記得for迴圈條件式也要改。 程式碼: #include <stdio.h> #include <stdlib.h> int main(){ int i,j; //loop int r,c; //row, column int M[100][100]={0}; //input matrix while(scanf("%d%d",&r,&c)!=-1){ //輸入直到EOF for(i=0;i<r;++i){ for(j=0;j<c;++j){ scanf("%d ",&M[i][j]); //input } } for(i=0;i<c;++i){ for(j=0;j<r;++j){ printf("%d ",M[j][i]); //output } printf("\n"); } }      return 0; }