==(1) 2/6前測==
題目: A168 禮品採購
下面的程式不完全正確(我測驗時寫的),有一段時間沒寫程式了,變得很生疏,題目也沒有完全理解到位,希望之後能把感覺找回來。
```
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n,N,d,D,A,B,C,j,i;
int s[3];
while(cin>>n>>d){
for(int j=1;j>4;j++){
cin>>s[j];
}
N=D=0;
for(int i=0;i>n;i++){
A=i[1]-i[2];
B=i[2]-i[3];
C=i[3]-i[1];
if(abs(A)>d ||abs(B)>d || abs(C)>d){
N=N+1;
D=D+(a+b+c)/3;
}
}
cout<<N<<" "<<D;
}
}
```
==(2) 2/23複習==
檢討上週題目,複習基本概念
```
#include <iostream>
using namespace std;
int main(){
int n,d;
int N=0,D=0;//輸出N是總數D是總價
while(cin>>n>>d){
for(int i=0;i<n;i++){//處理n次3季價格
int max=-1,min=101,sum=0;
int p,a;
for(int j=0;j<3;j++){//找出最大最小
cin>>p;
if(p>max)
max=p;
if(p<min)
min=p;
sum=sum+p;//統計價格等等要算平均
}
a=sum/3;
if((max-min)>=d){//最終比較和統計
N=N+1;
D=D+a;
}
}
cout<<N<<" "<<D;
}
}
```
==(3)3/2函式==
題目: c039 The 3n+1 problem
我今天請公假沒上到課。這題研究了有一段時間,本來看著答案一直看不懂,後來乾脆把答案關掉自己重寫一次,過程中突然就理解答案在寫什麼了
```
#include <iostream>
using namespace std;
int cl(int n){
int length=1;
while(n != 1){
if(n%2 == 1)
n = 3*n+1;
else
n = n/2;
length++;
}
return length;
}
int main(){
int i,j;
while(cin>>i>>j){
cout<<i<<" "<<j;
int max=-1;
if(i <= j){
for(int a=i ; a<=j ; a++){
int A=cl(a);
if(A>max)
max=A;
}
}
else{
for(int a=j ; a<=i ; a++){
int A=cl(a);
if(A>max)
max=A;
}
}
cout<<" "<<max<<endl;
}
}
```
==(4)3/9遞迴函式==
題目: A157 費波那契數列
```
#include<iostream>
using namespace std;
int fib(int n){
if(n==0)
return 0;
else if(n==1)
return 1;
else if(n>=2)
return fib(n-1)+fib(n-2);
}
int main(){
int n;
while(cin>>n){
cout<<fib(n)<<endl;
}
}
```
題目: A158 F91
```
#include<iostream>
using namespace std;
int f91(int n){
if(n<=100)
return f91(f91(n+11));
else if(n>=101)
return n-10;
}
int main(){
int n;
while(cin>>n && n!=0){
cout<<"f91("<<n<<") = "<<f91(n)<<endl;
}
return 0;
}
```
==(5)3/16指標==
題目: A147 促銷活動
```
#include <iostream>
using namespace std;
void discount(double *p1, double *p2){
if(*p1==*p2){
*p2=*p2/2;
}
}
int main(){
double p1, p2;
cout << "Original price:" << endl;
cin >> p1 >> p2;
discount(&p1,&p2);
cout << "Price after discount:" << endl;
cout << p1 << " " << p2 << endl;
return 0;
}
```
==(6)3/23二維陣列==
老師在線上幫我們上課,是不一樣的感覺
題目: a015 矩陣的翻轉
```
#include<iostream>
using namespace std;
int main(){
int a,b;
while(cin>>a>>b){
int A[100][100];
for(int i=0;i<a;i++){
for(int j=0;j<b;j++)
cin>>A[i][j];
}
for(int i=0;i<b;i++){
for(int j=0;j<a;j++)
cout<<A[j][i]<<" ";
cout<<endl;
}
}
}
```
==(8)4/6字串==
題目: A065 秘密差
```
#include<iostream>
#include<cmath>
using namespace std;
int main(){
string x;
while(cin>>x){
int A=0,B=0;
for(int i=0 ; i<x.length() ; i++){
if(i%2==0)
A=A+(x[i]-'0');
else
B=B+(x[i]-'0');
}
cout<<abs(A-B)<<endl;
}
}
```
==(9)4/13期中考==
老師有說會從教過的題目出,我有花時間複習,成功獲得100分
==(10)4/20字串==
題目: a009 解碼器
```
#include<iostream>
#include<cmath>
using namespace std;
int main(){
string x;
while(getline(cin,x)){
for(int i=0 ; i<x.length() ; i++){
x[i]=x[i]-7;
}
cout<<x;
}
}
```
題目: A067 ROT13
```
#include<iostream>
using namespace std;
int main(){
string x;
while(getline(cin,x)){
for(int i=0 ; i<x.length() ; i++){
if(x[i]>='A'&&x[i]<='Z')
cout<<char(((x[i]-'A')+13)%26+'A');
else if(x[i]>='a'&&x[i]<='z')
cout<<char(((x[i]-'a')+13)%26+'a');
else
cout<<x[i];
}
cout<<endl;
}
}
```
題目: d086 態度之重要的證明
```
#include<iostream>
using namespace std;
int main(){
string x;
while(cin>>x && x!="0"){
int sum=0;
for(int i=0 ; i<x.length() ; i++){
if(x[i]>='A'&&x[i]<='Z')
sum=sum+(x[i]-'A'+1);
else if(x[i]>='a'&&x[i]<='z')
sum=sum=sum+(x[i]-'a'+1);
else{
sum=-1;
break;
}
}
if(sum==-1)
cout<<"Fail"<<endl;
else
cout<<sum<<endl;
}
}
```
==(11)4/27結構==
題目: A150 多邊形面積
```
#include<iostream>
#include<cmath>
#include<iomanip>//取小數
using namespace std;
struct point{
float x,y;
};
int main(){
int n;
while(cin>>n){
point p[n+1];
for (int i=0; i<n; i++)
cin>>p[i].x>>p[i].y;
p[n]=p[0];
float a=0.0;
for (int i=0; i<n; i++)
a=a+(p[i].x * p[i+1].y - p[i+1].x * p[i].y); //公式
cout<<setprecision(2)<<fixed<<fabs(a)/2.0; //公式:要除二
}
}
```
==(11)5/4堆疊==
題目: A151 後序式求值
這題有點難,要先知道後序式
```
#include<iostream>
#include<stack>
using namespace std;
int main(){
stack<int>s;
string x;
while(cin>>x){
while(!s.empty())
s.pop();
for(int i=0 ; i<x.length() ; i++){
if(x[i]>='0' && x[i]<='9')
s.push(x[i]-'0');
else{
int b=s.top();
s.pop();
int a=s.top();
s.pop();
if(x[i]=='+')
s.push(a+b);
else if(x[i]=='-')
s.push(a-b);
else if(x[i]=='*')
s.push(a*b);
else if(x[i]=='/')
s.push(a/b);
else if(x[i]=='%')
s.push(a%b);
}
}
cout<<s.top()<<endl;
}
}
```
==(12)5/11堆疊==
題目: A119 括號
```
#include<iostream>
#include<stack>
using namespace std;
int main(){
stack<int>s;
string x;
int n=0;
while(cin>>x){
for(int i=0 ; i<x.length() ; i++){
if(x[i]=='(')
s.push(x[i]);
else{
if(!s.empty()){
s.pop();
n++;
}
else
s.push(x[i]);
}
}
if(!s.empty())
cout<<0;
else
cout<<n;
}
}
```
==(13)5/18佇列==
題目: e447 佇列練習
```
#include<iostream>
#include<queue>
using namespace std;
int main(){
queue<int> q;
int n,k,x;
while(cin>>n){
while(!q.empty()){
q.pop();
}
for(int i=0;i<n;i++){
cin>>k;
if(k==1){
cin>>x;
q.push(x);
}
else if(k==2){
if(!q.empty())
cout<<q.front()<<endl;
else
cout<<"-1"<<endl;
}
else if(k==3)
if(!q.empty())
q.pop();
}
}
}
```
題目: 約瑟夫問題
這題我自己寫出來了!
```
#include<iostream>
#include<queue>
using namespace std;
int main(){
queue<int> q;
int m,n,a;
while(cin>>n>>m){
while(!q.empty()){
q.pop();
}
for(int i=1;i<n+1;i++){
q.push(i);
}
while(q.size()>1){
for(int i=0;i<m-1;i++){
a=q.front();
q.pop();
q.push(a);
}
q.pop();
}
cout<<q.front();
}
}
```
==(14)5/25排序==
題目: d583 企鵝
```
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
int A[100000];
while(cin>>n){
for(int i=0;i<n;i++)
cin>>A[i];
sort(A,A+n);//這裡要記一下寫法
for(int i=0;i<n;i++)
cout<<A[i]<<" ";
cout<<endl;
}
}
```
題目: d190 年齡
```
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
int A[2000000];//電腦的陣列不能開到這麼大,但網站可以
while(cin>>n && n!=0){
for(int i=0;i<n;i++)
cin>>A[i];
sort(A,A+n);
for(int i=0;i<n;i++)
cout<<A[i]<<" ";
cout<<endl;
}
}
```
==(15)6/1搜尋==
題目: A152 二分搜尋
有點複雜,我看著書寫的話沒問題,直接來要記很多東西
```
#include<iostream>
using namespace std;
int main(){
int n,key;
int A[10000];
while(cin>>n){
for(int i=0;i<n;i++)
cin>>A[i];
cin>>key;
int L=0,R=n-1,M;
int count=0,pos=-1;//c是次數,p是位置
while(L<=R){
M=(L+R)/2;
count++;
if(A[M]==key){
pos=M;
break;
}
else if(A[M]<key)
L=M+1;
else if(A[M]>key)
R=M-1;
}
if(pos==-1)
cout<<"not found "<<count<<endl;
else
cout<<pos<<" "<<count<<endl;
}
}
```
==(15)6/8貪婪法==
題目: A091 加總的代價
```
#include <iostream>
#include <queue>
using namespace std;
int main(){
priority_queue<int, vector<int>, greater<int>> pq;
int n;
while(cin>>n && n!=0){
while(!pq.empty())
pq.pop();
int m;
for(int i=0;i<n;i++){
cin>>m;
pq.push(m);
}
long long int x,y,cost,total=0;
while(pq.size()>1){
x=pq.top();
pq.pop();
y=pq.top();
pq.pop();
cost=x+y;
pq.push(cost);
total=total+cost;
}
cout<<total<<endl;
}
}
```
==(16)6/15期末考==
班上太多人確診,被學校禁止上跨班的選修課,所以就沒考期末考了
==心得==
回顧一整個學期,不知不覺間已經學了很多程式設計概念,從函式到字串再到演算法,以前根本想像不到我能了解這些,有以前的基礎加上老師每題都講的很詳細,課程內的東西不會到特別特別難,但自己寫新題目就是另一回事了,能寫出來的機率很低,真的每次都要試驗很多次才有一點點機會成功。