cout << "hello, world"; if(n%2!=0) return 0; sum+=n; { } num[j+1]=t; num[j]=num[j+1]; t=num[j]; cnt++; dfs(i,j); // 從此點開始DFS { } { } if(visited[i][j]==0&&mp[i][j]=='@') // 目前座標沒被拜訪過 而且 有油 p++; break; break; if(num[j]>num[j+1]) prime=false; prime=false; break; break; cout << "A"; cout << "B"; cout << "C"; cout << "D"; cout << "hello, "<< s << endl; cout << "密碼錯誤" <<endl; cout << "帳號錯誤" <<endl; cout << "輸入錯誤!"; cout << i << " "; cout << i << " "; cout << i; cout<<endl; cout<<endl; cout<<mp[i][j]; cout<<score[i][j]<<"\t"; cout<<visited[i][j]; for(int j=0;j<c;j++) for(int j=0;j<c;j++) if(i%j==0) if(i%j==0) if(score[i][6]<score[j][6]) isPrime[i]=0; isPrime[i]=0; lower=mid; return dc(b,p/2,m)*dc(b,p/2,m)%m ; // p案计( b^(p/2)%m * b^(p/2)%m ) %m return dc(b,p/2,m)*dc(b,p/2,m)*b%m; // p计璶ゑ案计Ωb return sum; sol=true; sum*=i; // 每次迴圈 sum=sum*i sum+=score[i][j]; t=rand()%49+1; upper=mid; { } for(int j=0;j<5-i;j++) return; s=(double)(a+b+c)/2; visited[i][j]=cnt+1; (n+1)/2=a; a=(a*a+n)/(2*a); a=b; a=b; b=r; b=t; bool prime=true; bool prime=true; cin>> r>>c; cin>>money; cin>>mp[i][j]; cin>>n; cnt++; cnt++; cout << "*"; cout << "Hello" << endl; cout << "Welcome"; cout << "不能構成三角形"; cout << "交換前:" << a << " " << b << endl; cout << "交換後:" << a << " " << b << endl; cout << "函式內:"<< a << " " << b << endl; cout << "只能求完全平方數的平方根!"; cout << "輸入錯誤!"; cout << (9+6*a) <<endl; cout << (9+6*a) <<endl; cout << data[i] << " "; cout << data[i] << " "; cout << data[i] << " "; cout << dc(b,p,m) << endl; cout << endl; cout << endl; cout << endl; cout << endl; cout << i+1 <<"\t"; cout << num[i] << " "; cout << sk.top(); // 印出堆疊頂端元素 cout <<(L/4)*((L-(L/4)*2)/2) << endl; cout <<(n-1)<< endl; cout<< n/12*50+n%12*5<< endl; cout<<"請輸入第"<<i<<"個月的存款:"; cout<<(n%2==1? n-1:n)<<endl; cout<<cnt; cout<<endl; cout<<endl; do{ else else else else else else if (n==1) // n==1時終止,回傳1 else if(mid*mid<n) else if(score >=0) else if(score >=60) else if(score >=70) else() for (int j=2*i;j<n;j+=i) for (int j=2;j<i;j++) for (int j=2;j<sqrt(i);j++) for (int j=i*i;j<n;j+=i) for(int i=0;i<r;i++) for(int i=0;i<r;i++) for(int i=0;i<r;i++) for(int i=0;i<r;i++) for(int i=1;i<=n;i++) // 讓 i 從 1~n for(int j=0;j<4;j++) for(int j=0;j<7;j++) for(int j=0;j<8;j++) // 5科,欄 for(int j=0;j<c;j++) for(int j=0;j<c;j++) for(int j=1;j<=(5+2*(n-1))/3;j++) for(int j=1;j<=(5+2*(n-1))/3;j++) for(int j=1;j<=2*i+1;j++) for(int j=1;j<=2*i+3;j++) for(int j=1;j<=2*i-1;j++) for(int j=1;j<=n-i+1;j++) for(int j=1;j<=n-i+2;j++) for(int j=1;j<=n-i;j++) i++; if (i*i==n) if (n == 0) // n==0時終止,回傳0。if後只有一行,可省略{} if (p%2==0) if(isPrime[i]==1) if(isPrime[i]==1) if(mid*mid>n) if(n%2=1) if(prime) if(prime) if(pwd!="222") if(score >= 80) if(usr!="111") inorder(2*i+1); inorder(2*i+2); int a=1,b=2; int n; int p=1; int sum=1; int t; mark[t]=1; mid =(lower+upper)/2; n/2=a; n/=2; // 將n除以2 num[i]=t; postorder(2*i+1); postorder(2*i+2); preorder(2*i+1); preorder(2*i+2); q.pop(); // 將最上面的牌丟掉 q.pop(); // 將次張牌丟掉 q.push(i); // 將牌的編號(1 2 3 …)依序push入佇列 q.push(q.front()); // 將次張牌重新放入佇列尾端 r=a%b; return 0; return 0; return 0; return 0; return 0; return 0; return 0; return 0; return 1; return 1; return 1; return 8; return b%m; return brick(n-1)+5; return f(n-1)+n*(n+1)/2; return f(n-1)+n*(n+1)/2; return fib(n-1)+fib(n-2);//遞迴回傳 return; return; return; score[i][5]=sum; score[i][6]=sum/5; score[i][7]=p; sk.pop(); // 將堆疊頂端元素移除 sk.push(n%2); // 將n除以2的餘數push進堆疊 sum+=money; sum=0; swap(a,b); t=a; while() { } }while(mark[t]==1); 條件1「成立」,且條件2「不成立」時的程式碼 條件1「成立」,且條件2「成立」時的程式碼 cout<< fixed << setprecision(3) <<(f-32)/1.8 << endl; return 0; cout << i; dfs(i+1, j); // 下 dfs(i+1, j+1); // 右下 dfs(i+1, j-1); // 左下 dfs(i, j+1); // 右 dfs(i, j-1); // 左 dfs(i-1, j); // 上 dfs(i-1, j-1); // 左上。螢幕左上角為原點,往下、往右為正。 先看列(數學上的y),後看欄(數學上的x) dfs(i-1,j+1); // 右上 for(int i=0;i<4;i++) if (i*i==n) if(i<0 || i>=r ||j<0 || j>=c || visited[i][j]!=0 ||mp[i][j]!='@') // i(列)、j(欄)超出邊界、此點已被拜訪過、此點沒油 long long int long long int return 0; return 0; sum*=i; // 每次迴圈 sum=sum*i sum+=i; // 每次迴圈 sum=sum+i } 向北公式為2L-1,向南為2L ### 常見的六種時間複雜度與演算法 ### 循序搜尋 v.s. 二分搜尋 ### 求質數演算法效能比較 ### 運算能力 #include<iostream> * **EX: int Main; 不等於 int main;** * **EX: max()函數用來比較兩數較大者,如果想表示最大值可以宣告成 int maxx;** .... .... a=n; area=sqrt(s*(s-a)*(s-b)*(s-c)); area=sqrt(s*(s-a)*(s-b)*(s-c)); bool sol=false; cin >> n; cin >> pwd; cin >> score; cin >> usr; cin>> a >> b >> c ; cin>> a >> b >> c ; const double PI=2*acos(0); cout << endl; cout << endl; cout << endl; cout << "三角形面積為" << area << endl; cout << "三角形面積為" << area << endl; cout << "座號\t國文\t英文\t數學\t自然\t社會\t總分\t平均\t名次\n"; cout << "請輸入n:" ; cout << "請輸入n:"; cout << "請輸入n:"; cout << "請輸入密碼:"; cout << "請輸入帳號:"; cout << "請輸入成績:"; cout << brick(n) << endl; cout << f(n); // 平面 4->10 cout << f(n); // 立體 4->20 cout << fib(n) << endl; cout << g << endl; cout << q.front(); // 印出剩下的那張牌 cout << sum; cout << sum; cout <<"存了"<<i-1<<"個月,總共" <<sum<< endl; cout<< (m<=25? 25-m: 25-m+60)<< endl; cout<<"請輸入三角形三邊長"; cout<<"請輸入三角形三邊長"; cout<<(2*h+2*w)<<endl; cout<<(l<0? -l*2:l*2-1)<<endl; cout<<(m-1+(n-1)*m)<<endl; cout<<(v*t*2)<<endl; do do double D,L,s,l; double n,a; double n,lower,upper,mid; double s, area; double s, area; else fill(isPrime,isPrime+n+1,1); // 全部先設為1(true),假設都是質數。需含入algorithm標頭檔 fill(isPrime,isPrime+n+1,1); // 全部先設為1(true),假設都是質數。需含入algorithm標頭檔 for (int i=1;i<=n;i++) for (int i=2;i<=n;i++) for (int i=2;i<=n;i++) for (int i=2;i<=sqrt(n);i++) for (int i=2;i<=sqrt(n);i++) for(int i=0;i<4;i++) for(int i=0;i<4;i++) // 4個人,列 for(int i=0;i<5;i++) for(int i=0;i<6;i++) for(int i=0;i<6;i++) // 陣列的索引值由0開始,所以i初值為0 for(int i=1;i<=10;i++) for(int i=1;i<=n/2;i++) for(int i=1;i<=n/2;i++) for(int i=1;i<=n;i++) for(int i=1;i<=n;i++) for(int i=1;i<=n;i++) for(int i=1;i<=n;i++) for(int i=1;i<=n;i++) // 讓 i 從 1~n for(int i=1;i<=n;i++) // 讓 i 從 1~n g=gcd(a,b); g=gcd(g,c); g=gcd(g,d); if (p==1) // pだ澄1氨ゎ if(!sol) if(a>0 && b>0 && c>0 && a+b>c && a+c>b && b+c>a) if(i>=7) if(i>=7) if(i>=7) if(n==1) if(n==1) if(score>100 || score<0) if(usr=="111" && pwd=="222") if(條件2) inorder(0); int a,b,c; int a,b,c; int a=400, b=200, c=150, d=625, g; int b,p,m; int cnt=0; int cnt=0; int d,l; int f; int h,w; int i=1,money,sum=0; int m,n; int m; int mark[50]={0}; // 標記陣列的初值=0。50個空間,陣列索引值為0~49 int n,sum=0; // sum 初值設為 1 int n,sum=1; int n,sum=1; // sum 初值設為 1 int n; int n=1000000000; int n=1000000000; int n=1000000; int n=500000; int num[6],t; // 宣告一個大小6的num陣列 int r; int score; int score[4][8] = {{12,13,15,10,12,0,0,0},{15,13,15,15,14,0,0,0},{14,14,12,15,13,0,0,0},{11,10,12,12,10,0,0,0}},sum=0; int v,t; isPrime[1]=false; // 1不為質數 isPrime[1]=false; // 1不為質數 lower = 1; postorder(0); preorder(0); printf("%.3f\n",PI*s*l); printf("經過了 %d 次運算,根號 %f 為 %.13f", cnt,n,a); printf("經過了 %d 次運算,根號 %f 為 %.13f", cnt,n,mid); queue<int> q; // 宣告一個int型別的queue,名為q,需含入 queue 標頭檔 return 0; return a; return 回傳值或運算式; s=(double)(a+b+c)/2; s=sqrt(L/2*L/2-D/2*D/2); srand(time(NULL)); // 設定亂數種子。srand(time(NULL)); 需含入標頭檔 ctime stack<int> sk; // 需含入 stack 標頭檔 string s ; string usr,pwd; t--; upper = n-1; void inorder(int i) // 前序,void表示沒有回傳值 void postorder(int i) // 前序,void表示沒有回傳值 while (!sk.empty()) // 堆疊內還有元素 while (n>0) // n大於0 while (q.size()>1) // 當佇列size>1時繼續執行 while(cin >> b >> p >> m) while(cin >> s) while(cin>> D>> L) while(cin>> f) while(cin>> m) while(cin>>h>>w) while(cin>>L) while(cin>>l) while(cin>>m>>n) while(cin>>n) while(cin>>n) while(cin>>n) while(cin>>v>>t) while(sum<25000) while(upper-lower>1e-13) { if(n==1) {l=L/2; } } } // 複合指定運算子 *= } // 複合指定運算子 += }while((a*a-n>1e-13)); }while(r!=0); 周長減掉兩個寬剩兩個長 條件1「不成立」時程式碼 條件「不成立」時的程式碼 條件「成立」時的程式碼 程式碼 程式碼 int main() { } - 接近正方型面積會最大 ![](https://i.imgur.com/bW2o4vA.png) ![](https://i.imgur.com/fEek0CC.png) ![](https://i.imgur.com/gLhvtkk.png) ![](https://i.imgur.com/j9fLZjz.png) # 1.變數宣告 # 10.演算法 # 2.運算子 # 3.條件式 # 4.迴圈 # 5.陣列 # 6.函式 # 7.基礎演算法、資料結構 # 8.樹 # 9.圖 # include <iostream> # include <iostream> # include <iostream> ## EX-04:建立二元搜尋樹 ## EX-09-1:求10萬內的質數。註解17、18行->1.411 sec ## EX-09-2 ## EX-09-2:求100萬內的質數。註解17、18行->0.902 sec ## EX-10:ZeroJudge d219: 00374 - Big Mod ## EX-10:小算盤開根號(以牛頓法實作) ## EX-12_3:大樂透電腦選號(將數字排序顯示-Bubble Sort) ## EX-13:求學測總級分和平均。 ## EX-14 求最大公因數 ## EX-15 C取法 ## EX-17:將排序時用到的兩數交換程式碼,寫成函式。 ## EX-18:求費式數列第n項。 ## EX-19 ## EX-19_2 ## EX-3二元樹 二元樹的走訪(Tree Traversal)(課本p4-7) ## EX-5:若一篇文章每個字母出現的次數為 ## EX_02:ZeroJudge e183: 10940 - Throwing cards away II ## EX_07:畫出下圖的相鄰陣列,以Dijkstra演算法,求A到各點的最短路徑(以Excel表格表示)? ## EX_08:畫出下圖的最小生成樹,其權重總和為?28 ## EX-01:10進位轉2進位(以STL stack實作)。11->1011 ## 最小生成樹(minimum spanning tree)(課本p5-23) ### EX5-2 N!階層運算 ### (1). Kruskal演算法為一個使用貪婪法 (greedy method) 的演算法,一開始為一空樹,每次在不讓圖中含有任何迴路(cycle)下尋找圖中最小權重的邊加入樹中,直到所有點皆在樹中即完成。 ### 1.C++ 佇列(Queue)常用的方法 ### 1.if 條件式語法 ### 2.巢狀 if 語法 ### a:8,b:7,c:3,d:4,e:5,建立Huffman Tree(次數小的字母結點放左邊),並求每個字母的Huffman Code。 ### EX-06_2:ZeroJudge c129: 00572 - Oil Deposits。 ### EX-07 while 存錢買手機。 ### EX-08_2 小算盤開根號。 ### EX-08_3:小算盤開根號(以二分搜尋法實作) ### EX-09-3 平方篩檢法 減少重複標記 ### EX5 ### EX5-1 等差為1的級數總和 ### EX6-1 印出n列的直角三角形 ### EX6-2 印出金字塔形狀 ### EX6-3 3層聖誕樹。 ### EX8 簡單求開根號 ### EX_01 d483 hello, world ### EX_02 a001 哈囉 ### EX_02:承EX_01,先判斷三邊長是否可以構成三角形。如果可以,求三角形面積;如果不行,輸出錯誤。 ### EX_03 d827 買鉛筆 ### EX_03:驗證登入帳號、密碼 ### EX_04 d060 還要等多久啊? ### EX_04:驗證登入帳號、密碼 ### EX_05 d051 糟糕,我發燒了 ### EX_06 b004 繩子上吃草的牛 ### EX_07:輸入三角形三邊長,以海龍公式(1)、(2)求三角形面積。 ### ZeroJudge b112: 5. 高中運動會。 ### 以遞迴函式計算 n 層香檳塔,總共有幾個杯子。 ### 作業 ### 圖形是「頂點」(vertex)和邊(edge)所組成 ### 埃拉托斯特尼篩法(課本p3-5),求1000萬以內的質數。註解15行->0.155 sec ### 寫一函式可以計算n!,並以之求 C(n,k)=n!/((n−k)!∗k!) ### 對相當大的b、p、m,請寫一個有效率的演算法來計算 r = b^p mod m ( 1 <= b、p、m <= 32767 ) ### 最短路徑(一個頂點到多頂點Dijkstra)(課本p6-20) ### 模擬具有樹枝狀性質的資料,由節點與邊組成,例如家族族譜、電腦資料夾結構。 ### 自定函式宣告語法 ### 計算 n 層「三角錐形」香檳塔,總共有幾個杯子。 #### (1) 先乘除後加減 #### (2) 整數除法、浮點數除法:5/2、5.0/2 #### (2). Prim演算法與Dijkstra演算法類似,屢次找出不在樹上,離樹最近的點。 #### (3) 資料型態轉換: a=4, b=5, c=6, s=7.5 #### (A*B)%C=(A%C)*(B%C)→(BP)%M=(BP/2%M)*(BP/2%M) #### 1.科學記號表示法 #### 2.printf #### EX int num[6] #### EX: for(i=1;i<=10;i++) #### EX:A=A+B 可以寫成 A+=B #### Tip: printf .n控制小數點位數 #### Tip:先輸出s看看是否正確。 #### Tip:要加while() 進行重覆運算 #### Tip:每邊長要大於0,且任兩邊之和要大於第三邊。 #### `=`表示回傳數值 `==`表示運算數值 #### `第一個是if 第二個以後都是elseif 最後一個是else` #### 初值是1,條件判斷是<=10就會繼續做,每進去執行一次迴圈就會加1 #### 利用函式能夠縮短運算時間 函式本身可以自己呼叫自己的資料 #### 利用多個if條件式二分法判斷多個條件 #### 可以用來做簡單的是非條件判斷 #### 將資料讀進記憶體 並可以形成不同維度的表格讀取地址 #### 把即將要使用的記憶體空間命名 #### 會從!=1開始不斷加一,做到!=11 #### 有時候改變宣告方式可以得到更準確的答案或是不同的想法 #### 符號可以簡寫 #### 邏輯 #### 重複執行一個指令 用數字當作計數器 #include <cmath> #include <cstdio> #include <cstdlib> #include <ctime> #include <iomanip> #include <iostream> #include <stack> ( 第1層1個、2->3、3->6、4->10、5->15、第n層->?個杯子 ) (1) 插入排序法(Insertion Sort)、選擇排序(Selection Sort) (2) Sorting Algorithms Animations (Bonus):多加一個欄位求名次。 * ## 時間複雜度 * ## 演算法效能 * **endl 代表 end line,結束一行(換行)** * **使用Tab鍵 程式碼可以縮排 Enter鍵 可以換行** * **句子的結尾要有 分號 ;代表一件事結束** * **如果條件式內只有一行程式碼,大括號{}可以省略** * **將程式碼放入{ }中,就會由上到下執行,一旦執行到return 0 ;,程式就會立刻結束** * **有些特定單字不能使用,因為已經被系統設為常用函數** * **當程式無法執行時,可以設定端點在條件式或是迴圈之前進行Debug除錯** * **盡量不要在程式碼中使用中文字,容易出現錯誤** * **英文大小寫視為不同的文字** - 2h+2w(*不能省略),(h+w)*2 - 3x4巧克力需要11刀 - 3元運算子 - 3元運算子、% - for(變數初值;條件判斷;改變量) - long long int - m-1+m*(n-1) (why?) - PA^2^ + PC^2^ = PB^2^ + PD^2^ (畢氏定理) - v-t 圖算面積 - 場數差低於1場 所以要打至多 - 扣掉重覆的白色屋瓦。 --- --- 1. ### a861 1.Secure the Perimeter 10. ### d549 矩形中的几何 2. ### d226 10071 - Back to High School Physics 2017的世界紀錄總共杯子數量為50116,疊了幾層?66(二分搜循法) 3. ### d053 Big Chocolate 4. ### d277 矩陣對角線 5. ### b681 1. 山洞探險 6. ### d127 二、牧場面積 7. ### d461 班際籃球賽 8. ### d096 00913 - Joana and the Odd Numbers 9. ### c776 106北二1.六邊形屋瓦 :mega: :mega: 其它排序演算法 === a->01 或 11 b-> b=17、p=1765、m=3 → r=2 b=2、p=10、m=10 → r=4 b=2、p=8、m=10 → r=6 bool isPrime[1000000001]; // 區域變數只能到200萬左右,改為全域變數。 bool isPrime[1000000001]; // 區域變數只能到200萬左右,改為全域變數。 breaks: false c-> char mp[100][100]; cin >> t; cin>>a>>b; cin>>n>>k; cout << f(n)/(f(n-k)*f(k)) << endl; cout << x <<endl; cout<<"Case "<<f<<':'<<' '<<sum<<endl; d-> e-> else else for(int i=0;i<T;i++) for(int n=a;n<=b ;n++) Hint:類似bubble sort的寫法。若此位同學的總分<p位同學,名次為p+1。 if(條件) if(條件) if~else 語法: int brick(int n)//自己呼叫自己的數值 但要有初值 int cnt=0; int data[7]={0,1,2,3,4,5,6}; // 全域變數 int dc(int b,int p,int m) int f(int n) int f(int n) int f(int n) int fib(int n) int gcd(int a,int b) int m,n,x ; int main() int n,k; int n; int r,c;//全域變數 int T,a,b,sum,f=0; int visited[100][100]={0}; long long int a,n; long long int L; PA、PB、PC變數形態用long long int或double printf小數點,需 #include <cstdio> return 0; return 0; robots: noindex, nofollow sqrt(),需 #include <cmath> tags: 資訊 title : 資訊概論 using namespace std; void dfs(int i,int j) void preorder(int i) // 前序,void表示沒有回傳值 void swap(int &a,int &b)//將數值作連結 while (cin >> n>> m) while(cin>>T) while(t--) while(t>0) x= n*m*3+n*2+m*1; ```c++ ```C++ if(條件1) { {f++;sum=0; | ---- |:------:| | -------- | ---- |---| | -------- | -------- | | ------------- | --------------------------- | | sk.empty() | 判斷堆疊是否為空 | | sk.pop() | 刪除堆疊頂端元素 | | sk.push(x) | 從堆疊「頂端」加入一個元素x | | sk.size() | 堆疊元素數量 | | sk.top() | 取得堆疊頂端元素 | stack<int> sk | 建立一個int型別的stack | | `bool` | 布林(是非判斷) || | `char` | 字元(半形字)|| | `double` | 浮點數(小數點後兩位) || | `float` | 浮點數(小數點後一位) |-2| | `int` | 整數 |-2147483648~2147483647| | `string` | 字串(句子)|| | 乘法 | `*` | | 加法 | `+` | | 名稱 | 意義 | | 型態 | 中文 |數值範圍| | 減法 | `-` | | 負數 | `-` | | 運算 | 運算子 | | 運算 | 運算子 | | 遞增 | `++` | | 遞減 | `--` | | 除法 | `/` | | 餘數 | `%` | |AND | `&&` | |NOT | `!` | |OR | `||` | |XOR | `^` | |不等於 | `!=` | |大於 | `>` | |大於或等於|`>=` | |小於 | `<` | |小於或等於|`<=` | |相等 | `==` |     f(n)=? ,if n>1 中序走訪(inOrder):先走訪左子樹,然後樹根,最後右子樹。 以DFS找出@相鄰土地有@有幾塊。 以輾轉相除法求兩數的最大公因數(寫成函式),並用之來求4數的最大公因數。 依讀入順序 30, 15, 50, 35, 10, 25, 40, 20, 45 建立一個二元搜尋樹(binary search tree)。 分而治之(Divid and Conquer) 前序走訪(preOrder):先走訪樹根,然後左子樹,最後右子樹。 合併排序(Merge Sort)1、合併排序2 回傳值的型態 函式名稱(變數型態 參數1,變數型態 參數2,...) 因為成對出現的因數中,一個會≦√n,而另一個會≧√n。因此只要檢查≦√n中是否有n的因數即可。 基礎程式設計 C++ 如果一個數是合數,它的最小質因數會小於等於它的平方根。 對角線奇數可共用對角線交叉的花盆,偶數不共用 後序走訪(postOrder):先走訪左子樹,然後右子樹,最後樹根。 或 找出此列最後3個數字與第(N+1)/2列的關係 有N個奇數為第(N+1)/2列 條件「成立」時的程式碼 求最後剩下的那張牌編號為?(7->6、10->4) 短除法找三數的最大公因數(數學方法) 給你一疊有1~n編號的牌(1在最上面,n在最下面),在牌數大於1的時候執行以下操作:「丟掉最上面的牌,並把現在最上面的的牌放到最下面。」 輾轉相除法 遞迴式 : f(n)=1 ,if n==1