高中生程式解題系統:完全平方和

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 http://zerojudge.tw/ShowProblem?problemid=a059

演算法如下:
找出在範圍 [a, b]內大於或等於 a 的完全平方數(sqrt),與 a 的平方根(k)。當 sqrt小於或等於 b 時{  將 sqrt加到 sum裡  k+= 1  sqrt= k* k}

程式碼:
#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;

int main(int argc, char** argv) {
 int t, a, b;
 cin >> t;
 
 int sum[t];
 int i = 0;
 do {
  cin >> a;
  cin >> b;
  int k = 1;
  int sqrt = 1;
  
  sum [i] = 0;
  
  while(sqrt < a) {
   k++;
   sqrt = k * k;
  }
  
  //cout << "S:" << sqrt << endl;
  
  if( sqrt <= b)
      sum[i] = sqrt;
     else
      sum[i] = 0;
  
  k++;
  sqrt = k * k;
  while(sqrt <= b) {
  // cout << "S:" << sqrt << endl;
   sum[i] += sqrt;
   k++;
   sqrt = k * k;
  }
  
  //cout << sum[i] << endl << endl;
  i++;
 } while(i < t);
 
 for(i = 0; i < t; i++)
 {
  cout << "Case " << i + 1 << ": " << sum[i] << endl;
 }
 return 0;
}

數線的觀念


若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

把一個數字放到直線上的一個很多點(數字)所組成的線稱為數線以下圖為例,-3, -2, -1, 0, 1, 2, 3, 4, 5, 6 都是這條直線上的整數,-3 -2之間又有許多的小數(浮點數),每一個小數在數線上都可用一個點來代表,而在數線上左邊的點是小於右邊的點。






若要在數線上標出1/4,因為0.25介於[0, 1]兩個整數之間,於是將[0, 1]之間的線段做4等分切割,每一格的長度就是,1/40 + 0.25就是1/4(紅色箭頭)的位置了。

註:數線圖是由此網址所產生的。

吃不完的巧克力 - 相似形

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。


第一次看到這影片時,馬上想到被切掉一小塊後的整塊巧克力面積一定小於原本的,只是視覺上被騙而已,而這個也是魔術的手法之一,真是個維妙維肖的假長方形阿!

高中生程式解題系統:新手訓練 ~ for + if

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 http://zerojudge.tw/ShowProblem?problemid=a244

此題要用 long long int 型態,其他依照題目要求即可。此外筆者在程式碼二用了 Array of Function Pointers 的解法。
程式碼一:
#include <cstdio>

int main() {
 int n;
    while(scanf("%d", &n) != EOF)
 {
  int a;
  long long int b, c;

  for(int i = 0; i < n; i++)
  {
   scanf("%d %lld %lld", &a, &b, &c);
   switch(a) {
    case 1:
     printf("%lld", b+c);
     break;
    case 2:
     printf("%lld", b-c);
        break;
    case 3:
     printf("%lld", b*c);
     break;
    case 4:
     printf("%lld", b/c);
     break;
    default:
     break;
   }
   printf("\n");
  }

 }
    return 0;
}


程式碼二:
#include <iostream>

using namespace std;

long long int add(long long int b, long long int c)
{
    return b + c;
}

long long int mins(long long int b, long long int c)
{
    return b - c;
}

long long int mul(long long int b, long long int c)
{
    return b * c;
}

long long int divi(long long int b, long long int c)
{
    return b / c;
}

int main() {
 int n;
 long long int(*cal[5])(long long int, long long int) = {NULL, add, mins, mul, divi};

    while(cin >> n)
 {
  int a;
  long long int b, c;

  for(int i = 0; i < n; i++)
  {
      cin >> a >> b >> c;
      cout << cal[a](b, c) << endl;
  }

 }
    return 0;
}

惡搞嘻語言第二嘻:嘻資料


若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

C 語言中,宣告一個變數的語法為:
變數型態  變數1, 變數2, ...., 變數n;
詳細的教學可參考底下兩個網頁:

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#include<stdint.h>

intmain(void) {
// 有號整數
shortsht; // -32768->32767
inti; // -32768->32767
longl; // -2147483648->2147483647

// 無號整數
unsignedshortusht;
unsignedintui;
unsignedlongul;

// 浮點數
floatf; // 單精準度
doubled; // 雙精準度

// 字元,請參考 http://www.asciitable.com/
charc = 'a';
c = 97;

printf("型態\t\t大小(bytes\n");
printf("short\t\t%d\n", sizeof(short));
printf("int\t\t%d\n", sizeof(int));
printf("long\t\t%d\n", sizeof(long));
printf("float\t\t%d\n", sizeof(float));
printf("double\t\t%d\n", sizeof(double));
printf("long double\t%d\n", sizeof(longdouble));
printf("char\t\t%d\n", sizeof(char));

// 請參考 http://www.cplusplus.com/reference/climits/
// http://edisonx.pixnet.net/blog/post/35305668-%5Bc%5D-printf-%E5%BC%95%E6%95%B8%E8%AA%AA%E6%98%8E
printf("SHRT_MIN = %d\n", SHRT_MIN);
printf("SHRT_MAX = %d\n", SHRT_MAX);
printf("USHRT_MAX = %d\n", USHRT_MAX);

printf("INT_MIN = %d\n", INT_MIN);
printf("INT_MAX = %d\n", INT_MAX);
printf("UINT_MAX = %u\n", UINT_MAX);

printf("LONG_MIN = %ld\n", LONG_MIN);
printf("LONG_MAX = %ld\n", LONG_MAX);
printf("ULONG_MAX = %lu\n", ULONG_MAX);
printf("LLONG_MAX = %lld\n", LLONG_MAX);
printf("LLONG_MIN = %lld\n", LLONG_MIN);
printf("ULLONG_MAX = %llu\n", ULLONG_MAX);

system("pause"); // Console 視窗等待使用者輸入鍵盤上的任意按鍵
return0;
}


惡搞嘻語言第一嘻:嘻上路


若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

前言(Preface)
啥是前言,本系列文章的前夕()嗎?本系列會有高潮可言嗎?不會有!所以請略過此節。

全世界都不會的嘻 (hello.c)
#include<stdio.h> // 函式 printf header file
#include<stdlib.h>// 函式 system header file

intmain(void) {
printf("嘻嘻嘻嘻嘻\n"); // 輸出文字
printf(" CCCCcc\n");
printf(" CC\n");
printf(" C\n");
printf("CC\n");
printf(" C\n");
printf(" CC\n");
printf(" CCCCcc\n");
system("pause"); // Console 視窗等待使用者輸入鍵盤上的任意按鍵
printf("C What?!\n");
printf("嘻什麼?\n");
system("pause");
return0;
}

在寫程式的時候,大多都不會自己從低階的組合語言(http://it-easy.tw/assembly-language/)開始寫,於是嘻語言提供了共用的函式庫,如此例中的printfsystem都是由嘻語言所提供的,而#include<filename.h>就是告訴Compiler有用到此兩個函式,不要給我compile error啊,而在產生執行檔時,linker就會將相關的*.obj給加進來(細節請參考<<程式設計師的自我修養:連結、載入、程式庫>>一書)


嘻練習:
使用printf輸出你的名字。


讀書筆記:沒了名片,你還剩下什麼?

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

在大學時,我曾公開表明:「若有同學在沒畢業前就要創業公司,記得要找我。」
當時的我就像一般年輕人想創業的心態一樣,「有夢想卻不正視現實層面。」
直到現在身邊還是會有一些人會問我:「我會去創業開公司嗎?」
我的心態如同作者與一些創業者(如中國藍)類似:「在現有的職場上沒有退路時,就只有創業一路。」
底下是從書上挑選下來的筆記:
Chapter 1 掌握自我定位
<<< 理想主義者是不可救藥的:如果他被扔出他的天堂,他會再製造出一個理想的地獄。---尼采 >>>
* 進了知名企業像進了魔法學院,拿出魔法卡會有意想不到的效果。
* 把自己視為獨立事業體來經營,就是創業!
* 創業是自己和伙伴們獨立創造賴以生存的價值,而不是向別人借錢去滿足自己達不到的夢想。
* 該考量的,不是滿足於小小的平穩,而是有一個遠大的夢想,大到能奮力去追尋的地步。
* 這年頭要擔任公職,其實是「押很大」的賭注!
* 工作是人生最重要的一部分,如果可能,應該去享受,而非忍受。
* 如果渴望悠閒的生活,馬上就要行動,而不是期待數十年後退休的那天開始。
* 找到描述自己的關鍵字
* 平凡其實很貴
* 履歷 = 別人眼中的自己
* 履歷 = 自我的回顧與展望
Chapter 2 了解職場規則
<<< 我們必須習慣,站在人生的交叉路口,卻沒有紅綠燈的事實。---海明威 >>>
* 老闆所需要的,是能幫公司降低風險的人,一個人若能把事情都想的周到、看得遠、顧慮的清晰,他的重要性其實只會增加不會減少。
* 天底下根本沒有公不公平的問題,只有你有沒有利用價值的問題。
* 當主管的心態建議:注意寂寞、小心安全感、要有良心;長期職涯發展的建議:透明度、忍耐力、接班人。
* 在對的時間點,很輕易做到的功勞,比累得要死,卻看不出成果的苦勞更有用。
* 不管進入哪個產業,有沒有辦法獨當一面,成為不靠特定組織也能運作的個體,比預測哪個產業會賺大錢要重要得多。
* 「寧為蛇頭,勿為牛尾」在跆拳道和職場上都是適用的。
Chapter 3 增加自我籌碼
<<< 「一個人表現優異,一個人表現平平,他們的差異與才華無關。成效其實與行為習慣及一些基本原則有關。」---彼得‧杜拉克 >>>
* 能的話,盡量把自己第二擅長的能力當成選工作的優先考量。
* Excel使用技巧、文字報告與檔案整理能力。
* 向上管理的五個原則:了解老闆的目標、了解老闆的溝通模式、了解老闆的作息、了解老闆的管理風格、了解你的角色定位。
* 多思考如何讓自己成為解決問題的人,而非拘泥表面職稱與職責,才能開括出一條更順暢的職場之路。
* 新手主管該知道的五件事:了解老闆的目標、要把自我原則先建立好、要有安全感、要習慣分配工作、有問題不要隱忍。
* 「看準目標,想好策略,伺機出手,緊抓不放」,不管在大街上還事辦公室,都是最佳的生存之道!
* 閱讀時不必設限書的類型,就算只是休閒看的小說、或是其他的知識,都可能因此讓自己觸發新思維。
Chapter 4 正向工作心態
<<< 「一個心態樂觀的人,會在災難中看見希望,而一個心態悲觀的人,會在希望中看見災難。」---西方古諺 >>>
* 開心工作的心態:樹立明確的目標、擁有備選方案、專注在當下。
* 解決問題與擺脫困境的五種態度:
I. 不斷告訴自己:這問題鐵定有解(常保樂觀)。
II. 把自己從問題中抽離出來(旁觀者清)。
III. 換個維度看問題(宏觀視野)。
IV. 事緩則圓,時間是最佳良藥(靜觀其變)。
V. 提醒自己,追究責任不能解決問題(達觀以對)。
* 當我們面對自己的人生,最關鍵的課題不在「你是什麼」,而在你如何「定義」自己!
* 「跟主管保持良好互動」絕對是職場最重要的能力,值得你用心培養。
* 要是目前的工作找不到和個人目標的連結,就應該趕緊做出必要的轉變,千萬不要因為「我在外面找不到更高的薪水」而留在原地,那很可能表示,你的老闆付給你的薪水已經超過市場行情。
* 員工和雇主原本就是一種合夥關係,越是依賴對方,手上的籌碼就少,這場遊戲也就喪失了主導權。
Chapter 5 提升轉職勝率
<<< 一個人的性格決定他的際遇。如果你喜歡保持你的性格,那麼,你就無權拒絕你的際遇。---羅曼‧羅蘭 >>>
* 自傳就是「個人的廣告」,寫自傳的目的,就是獲得「面試的機會」!
自傳就是「個人的廣告」,寫自傳的目的,就是獲得「面試的機會」!
自傳就是「個人的廣告」,寫自傳的目的,就是獲得「面試的機會」!
* 面試難題 TOP 10:
1. 你為何離開之前的公司?
2. 對於你的上個老闆,你欣賞與不相賞的特質分別是什麼?
3. 你要如何告訴你老闆或是員工「壞消息」?
4. 當你的工作表現優異,你希望獲得什麼樣的讚賞?
5. 當你和主管/員工意見不和時,你通常如何處理?
6. 你認為什麼樣才是一個誠信的員工?
7. 你如何和不同世代的同事相處?你認為他們有何特色?
8. 你認為「年齡歧視」是職場普遍的問題嗎?
9. 你覺得和其他競爭者相比,我們最該雇用你的理由是?
10. 在你過去待過的公司中,你欣賞什麼樣的公司文化?
* 求職要勝出,先問自己下面兩個問題:
1. 五到七年後,你想達到什麼樣的職場成就(包含職位、薪資等)?
2. 你和你的同儕相比,你的差異性是什麼?
* 三個圈,畫出你的領域
第一個圈:找出有興趣、有熱忱或覺得自己擅長的領域與條件(主觀)
第二個圈:曾獲得身邊人們稱讚或肯定的事實與特質(客觀)
第三個圈:市場存在的職位、機會、和專業領域(市場)
* 求職時該做與不該做的十件事:
1. 家人不重要,除非他們很重要。
2. 「想做」不重要,「會做」才重要。
3. 有什麼證明不重要,能獨當一面完成工作才重要。
4. 千萬別說你「想學東西」,你又不是要來繳費上課。
5. 別談成就感,那是穩定性差得同義詞。
6. 不要否定自己的過去,那些其實是讓你被注意的原因。
7. 你該做的,是多談工作的正面經歷。
8. 你該做的,是有什麼缺點自己先提出。
9. 清楚告訴對方你的價值。
10. 可以的話,履歷要針對不同公司微調。
* 年度職涯健檢三原則:
原則一,履歷不該只有一份。
原則二,履歷更新的目的,在於回顧與反省。
原則三,人生是你自己的,必要時請考慮重新計畫。
* 更新履歷的另一目的,讓你有機會去思考你的人生目標是否真是自己想要的。

高中生程式解題系統:新手訓練 ~ 陣列應用

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 http://zerojudge.tw/ShowProblem?problemid=a248

此題和台中女中程式解題系統的 c046: 3.小數點後N位 一題類似,解法是以「除法的直式計算」的觀念,搭配程式的迴圈來實作。

程式碼一:
#include <cstdio>

int main() {
 int a, b, n;
 
    while(scanf("%d%d%d", &a, &b, &n) != EOF)
 {
  printf("%d.", a / b);
  
  a = a % b;
  for(int i = 0; i < n; i++)
  {
   a = a * 10;
   printf("%d", a / b);
   a = a % b;
  }
  
  printf("\n");
 }
    return 0;
}


程式碼二:
  1. /**********************************************************************************/  
  2. /*  Problem: c046 "3.小數點後N位" from 108校內初賽                                         */  
  3. /*  Language: C++                                                                 */  
  4. /*  Result: AC (4ms, 180KB) on ZeroJudge                                          */  
  5. /*  Author: pinglunliao at 2019-10-28 14:27:35                                    */  
  6. /**********************************************************************************/  
  7.   
  8. #include <iostream>  
  9.   
  10. using namespace std;  
  11.   
  12. int main(void) {  
  13.     int a, b, d;  
  14.     cin >> a >> b >> d;  
  15.   
  16.     cout << a/b << ".";  
  17.   
  18.     a = (a % b) * 10;  
  19.   
  20.     for(int i = 0; i < d; i++)  
  21.     {  
  22.         cout << a/b;  
  23.         a = (a % b) * 10;  
  24.     }  
  25.   
  26.     return 0;  
  27. }