發表文章

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

【科普】Syd科學小教室(2):為什麼電漿會發光?探究微觀的世界

前情提要: [科普]Syd科學小教室(1):電是什麼呀? 雨:電漿為什麼會發光呢? Syd:雨,你認為電漿裡頭有陽離子跟電子,會發生什麼事? 雨:會發生什麼事……呀? Syd:陽離子帶正電,電子帶負電,你認為會發生什麼事? 雨:相吸嗎? Syd:對,會 相吸 。然後 電子就掉回到陽離子的軌域裡 了。意思是,那個陽離子得到了電子,變回電中性了。 雨:哇,又變回來了。軌域是什麼? Syd:雨,你知道,世界上所有的東西都是由原子組成的嗎? 雨:知道啊。怎麼了? Syd:那麼,你知道原子外有電子繞著原子跑嗎? 雨:這個我也知道啦。 Syd:你認為電子會怎麼跑? 雨:嗯,我不知道。像行星繞太陽嗎? Syd:有點像。但是電子並不像我們地球繞行時有固定的軌道。 對於電子,它有的是軌域 ,是一個範圍而非特定的軌道。 雨:一個範圍……?我不太懂。 Syd:就是電子 可能會出現的特定範圍 。 雨:所以電子在裡頭亂跑嗎? Syd:算是吧。我們說的軌域範圍,其實就是 電子雲 代表 電子在那個位置出現的出現的機率 。 雨:電子雲? Syd:就是我們剛剛說的,電子有出現機率,可能出現的範圍。因為如雲狀,所以叫機率雲。示意的圖片你可以上網Google找到。 雨:噢。那為甚麼電漿會發光? (Syd:要解釋很久的問題又回來啦。) Syd:還記得電子和陽離子相吸嗎?我們想像一下,你我都是電子,地球是陽離子。 雨:那我們有同性電作用,要離很遠耶。 Syd:很好,這就是社交距離。我們如果到高的地方, 掉回地面是不是會釋出能量 ?比如說你從三階樓梯上跳下來—— 雨:對對對。 Syd:那 原子的軌域也有不同的能階 。意思是像樓梯一樣有好多階。 雨:所以,電子從能階上掉下來也會釋放能量囉? Syd:是的。 能量會用光的形式釋出 。 雨:哇,原來如此! 本篇介紹專有名詞: 電漿 、 軌域 、 機率雲 、 能階

【程式解題】ZeroJudge a216數數愛明明 C解法

直觀遞迴解法 input 數字的大小會造成output整數溢位。 所以要用long unsigned。 #include <stdio.h> #include <stdlib.h> long unsigned f(int x); long unsigned g(int y); int main(){ int n; while(scanf("%d",&n)!=EOF){ printf("%lu ",f(n)); printf("%lu\n",g(n)); } system("pause"); return 0; } long unsigned f(x){ if(x==1) return 1; else return x+f(x-1); } long unsigned g(y){ if(y==1) return 1; else return f(y)+g(y-1); }

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

CPP解法請點此 #include <stdio.h>   int main(){ int i; //loop int n; //從 n 開始數  int m; //總和會超過 m int sum; //總和 int count; //數了幾個數字 while(scanf("%d%d",&n,&m)!=EOF){ sum=0; //總和歸零 for(i=0;i<=1000000000;++i){ sum+=n+i;                         //從n開始數,數一個就加到sum裡 if(sum>m){ //如果sum>m count=i+1; //記錄數了幾個 break; //跳出迴圈 } } printf("%d\n",count); //輸出 } return 0; } 

【程式解題】APCS 第一題:邏輯運算子 C解法

  #include <stdio.h> #include <stdlib.h> int main(){ int i,j; int a,b,r;//input int t; scanf("%d%d%d",&a,&b,&r); if(a>b){//讓 a 一定是小的  t=a; a=b; b=t; } if(r){ if(a==0&&b!=0) printf("OR\nXOR\n"); else if(a!=0&&b!=0) printf("AND\nOR\n"); else printf("IMPOSSIBLE\n"); } else { if(a==0){ if(b){ printf("AND\n"); }else if(b==0){ printf("AND\nOR\nXOR\n"); } }else if(a!=0&&b!=0){ printf("XOR\n"); } else printf("IMPOSSIBLE\n"); } return 0; }

【程式解題】 APCS - 2017/3/4 第一題:秘密差 C解法

思維:輸入為字串,用for迴圈一位一位轉整數(可用atoi或ASCII碼概念減去'0'),再相加奇數/偶數和。 #include <stdio.h> #include <stdlib.h> #include <string.h>  int main(){ int i,j; char input[1001]=" "; int array[1001]={0};//一位一位轉成integer  int odd=0,even=0; int ans=0; scanf("%s",input);//輸入  for(i=1;i<=strlen(input);++i){ array[i]=input[i-1]-'0';//轉整數 } for(i=1;i<=strlen(input);i+=2){ odd+=array[i]; } for(i=2;i<=strlen(input);i+=2){ even+=array[i]; } if(odd<even) ans=even-odd; else ans=odd-even; printf("%d\n",ans); return 0; }

【程式解題】APCS - 2016/10/29 第一題:三角形判別 C解法

只有三個數要排序,故不使用 迴圈搭bubble sort排序,因為輸出還要三元運算子消空格,有點麻煩。其實也可以把SWAP過程模組化。 #include <stdio.h> #include <stdlib.h> int main(){ int i,j; int max,mid,min,tmp; scanf("%d%d%d",&max,&mid,&min);//輸入   if (max<mid){ tmp=max; max=mid; mid=tmp; } if (max<min){ tmp=max; max=min; min=tmp; } if (mid<min){ tmp=mid; mid=min; min=tmp; } printf("%d %d %d",min,mid,max);//輸出 if(min+mid<=max) printf("\nNo"); else if((min*min)+(mid*mid)<(max*max)) printf("\nObtuse"); else if((min*min)+(mid*mid)==(max*max)) printf("\nRight"); else printf("\nAcute"); return 0; }

【程式解題】 APCS - 2016/3/5 第三題:線段覆蓋長度 C解法(逐行註解)

題目請點此 評分結果 : AC   (15ms, 4MB) 解題思路:製造布林陣列,填格子式解法。 備註: 使用初始化的動態陣列。

【程式解題】 ZeroJudge a038數字翻轉 C解法(逐行註解)

題目請點此 評分結果 : AC   (2ms, 96KB) 解題思路:在string跟integer之間轉換以消去多餘的0。 例如input是002330,先轉integer消去前方的0,變成2330。之後再轉回字串以便翻轉。翻轉完變成0332,再轉成整數消前方的0,得到output為332。(僅是舉例,並無推銷2330之意) 備註:itoa指令(非標準)不能使用,可改用sprintf。