# **程式設計(C++)**
# *I 變數與運算子*
## EX_01 三角形三邊長,以海龍公式求三角形面積
```cpp=
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a,b,c;
double s,area;
cout << "請輸入三角形三邊長:";
cin >> a >> b >> c;
s=(double)(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
cout << "三角形面積為 " << area << endl;
return 0;
}
```
## d483 hello, world
```cpp=
#include <iostream>
using namespace std;
int main()
{
cout << "hello, world" << endl;
return 0;
}
```
## a001 哈囉
```cpp=
#include <iostream>
using namespace std;
int main()
{
string s;
while(cin >> s)
{
cout << "hello, " << s << endl;
}
return 0;
}
```
## d489 伏林的三角地
```cpp=
#include <iostream>
using namespace std;
int main()
{
int a,b,c,s;
while(cin >> a >> b >> c)
{
s=(double)(a+b+c)/2;
cout << s*(s-a)*(s-b)*(s-c) << endl;
}
return 0;
}
```
## d827 買鉛筆
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
cout << n/12*50+n%12*5 << endl;
}
return 0;
}
```
## d060 還要等多久啊?
```cpp=
#include <iostream>
using namespace std;
int main()
{
int m;
while(cin >> m)
{
cout << (m<=25 ? 25-m : 25-m+60) << endl;
}
return 0;
}
```
## d051 糟糕,我發燒了!
```cpp=
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int f;
while(cin >> f)
{
cout << fixed << setprecision(3) << (f-32)/1.8 << endl;
}
return 0;
}
```
## b004 繩子上吃草的牛
```cpp=
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int main()
{
double D,L,s,l;
const double PI=2*acos(0);
while(cin >> D >> L)
{
s=sqrt((L/2)*(L/2)-(D/2)*(D/2));
l=L/2;
printf("%.3f\n", PI*s*l);
}
return 0;
}
```
## d039 11044 - Searching for Nessy
```cpp=
#include <iostream>
using namespace std;
int main()
{
int t,n,m;
cin >> t;
while(t>0)
{
cin >> m >> n;
cout << (m/3)*(n/3) << "\n";
t=t-1;
}
return 0;
}
```
## a861 Secure the Perimeter
```cpp=
#include <iostream>
using namespace std;
int main()
{
int H,W;
while(cin >> H >> W)
{
cout << 2*H+2*W << endl;
}
return 0;
}
```
## d226 Back to High School Physics
```cpp=
#include <iostream>
using namespace std;
int main()
{
int t,v;
while(cin >> t >> v)
{
cout << 2*v*t << endl;
}
return 0;
}
```
## d053 Big Chocolate
```cpp=
#include <iostream>
using namespace std;
int main()
{
int M,N;
while(cin >> M >> N)
{
cout << (M-1)+(N-1)*M << "\n";
}
return 0;
}
```
## d277 矩形對角線
```cpp=
#include <iostream>
using namespace std;
int main()
{
int N;
while(cin >> N)
{
if((N%2)==1)
{
cout << N-1 << endl;
}
else
{
cout << N << endl;
}
}
return 0;
}
```
## b681 1.山洞探險
```cpp=
#include <iostream>
using namespace std;
int main()
{
int L;
while(cin >> L)
{
cout << (L>0 ? 2*L-1 : L*(-1)*2) << endl;
}
return 0;
}
```
## d127 二、牧場面積
```cpp=
#include <iostream>
using namespace std;
int main()
{
long long int L,S;
while(cin >> L)
{
S=L/2;
cout << (S/2)*(S/2+S%2) << endl;
}
return 0;
}
```
## d461 班際籃球賽
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
cout << n-1<< endl;
}
return 0;
}
```
## d096 00913 - Joana and the Odd Numbers
```cpp=
#include <iostream>
using namespace std;
int main()
{
long long int N;
while(cin >> N)//1<N<1000000000
{
N=(N+1)/2;
cout << (1+((6+6+4*(N-2))*(N-1)/2)-2)*3 << endl;
}
return 0;
}
```
## c776 106北二1.六邊形屋瓦
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n,m;
while(cin >> n >> m)
{
cout << ((n*m*6)-(2*(m-1)*n)-(n-1)*m) << endl;
}
return 0;
}
```
## d549 矩形中的几何
```cpp=
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int main()
{
double A,B,C,D;
while(cin >> A >> B >> C)
{
D= sqrt(A*A+C*C-B*B);
printf("%.2f\n",D);
}
return 0;
}
```
# *II 條件判斷*
## EX_02 判斷三邊長是否可以構成三角形,如果可以,求三角形面積
```cpp=
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a,b,c;
double s,area;
cout << "請輸入三角形三邊長:";
cin >> a >> b >> c;
if(a>0 && b>0 && c>0 && a+b>c && b+c>a && a+c>b)
{
s=(double)(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
cout << "三角形面積為 " << area << endl;
}
else
{
cout << "不能構成三角形";
}
return 0;
}
```
## EX_03 驗證登入帳號、密碼
```cpp=
#include <iostream>
using namespace std;
int main()
{
string usr,pwd;
cout << "enter account:" << endl;
cin >> usr;
cout << "enter password:" << endl;
cin >> pwd;
if(usr=="999" && pwd=="666")
{
cout << "Welcome";
}
else
{
if(usr!="999")
{
cout << "account error" << endl;
}
if(pwd!="666")
{
cout << "password error" << endl;
}
}
return 0;
}
```
## EX_04 將成績轉換成等級制
```cpp=
#include <iostream>
using namespace std;
int main()
{
int score;
cout << "enter score:" << endl;
cin >> score;
if(score>100 || score<0)
{
cout << "error" << endl;
}
else
{
if(score>=80)
{
cout << "A";
}
else if(score>=70)
{
cout << "B";
}
else if(score>=60)
{
cout << "C";
}
else if(score>=0)
{
cout << "D";
}
}
return 0;
}
```
## d058 BASIC 的 SGN 函數
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
if(n>0)
cout << "1" << endl;
else if(n==0)
cout << "0" << endl;
else if(n<0)
cout << "-1" << endl;
}
return 0;
}
```
## a006 一元二次方程式
```cpp=
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int main()
{
int a,b,c,m,n,d;
while(cin >> a >> b >> c)
{
d=b*b-4*a*c;
if(d<0)
cout << "No real root";
m=(-b+sqrt(d))/2/a;
n=(-b-sqrt(d))/2/a;
if(d==0)
cout << "Two same roots x=" << m;
else if(d>0)
cout << "Two different roots x1=" << m << " , x2=" << n;
}
return 0;
}
```
## a004 文文的求婚
```cpp=
#include <iostream>
using namespace std;
int main()
{
int Y;
while(cin >>Y)
{
if(Y%4==0 && Y%100!=0 || Y%400==0)
{
cout << "閏年\n" << endl;
}
else
{
cout << "平年\n" << endl;
}
}
return 0;
}
```
## a012 10055 - Hashmat the Brave Warrior
```cpp=
#include <iostream>
using namespace std;
int main()
{
long long int m,n,ans;
while(cin >> m >>n)
{
if( m>n )
{
cout << m-n << endl;
}
else
{
cout << n-m << endl;
}
return 0;
}
}
```
## d065 三人行必有我師
```cpp=
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
while(cin >> a >> b >> c)
{
if(a>b && a>c)
{
cout << a << endl;
}
else if(b>c)
{
cout << b << endl;
}
else
{
cout << c << endl;
}
}
return 0;
}
```
## a053 Sagit’s 計分程式
```cpp=
#include <iostream>
using namespace std;
int main()
{
int N;
while(cin >> N)
{
if(N>=0 && N<=10)
{
cout << N*6 << endl;
}
else if(N<=20)
{
cout << 60+(N-10)*2 << endl;
}
else if(N<=40)
{
cout << 80+(N-20)*1 << endl;
}
else
{
cout << 100 << endl;
}
}
return 0;
}
```
## d064 ㄑㄧˊ 數?
```cpp=
#include <iostream>
using namespace std;
int main()
{
int i;
while(cin>> i)
{
if(i%2==1)
{
cout << "Odd" << endl;
}
else
{
cout << "Even" <<endl;
}
}
return 0;
}
```
## d066 上學去吧!
```cpp=
#include <iostream>
using namespace std;
int main()
{
int hh,mm;
while(cin >> hh >> mm)
{
if((hh>=8&&hh<17)||(hh==7&&mm>=30))
{
cout << "At School" << endl;
}
else
{
cout << "Off School" << endl;
}
}
return 0;
}
```
## d460 山六九之旅
```cpp=
#include <iostream>
using namespace std;
int main()
{
int a;
while(cin >> a)
{
if(0<=a&&a<=5)
{
cout << "0" << endl;
}
else if(6<=a&&a<=11)
{
cout << "590" << endl;
}
else if(12<=a&&a<=17)
{
cout << "790" << endl;
}
else if(18<=a&&a<=59)
{
cout << "890" << endl;
}
else if(60<=a)
{
cout << "399" << endl;
}
else
{
cout << " " << endl;
}
}
return 0;
}
```
## a273 小朋友下樓梯
```cpp=
#include <iostream>
using namespace std;
int main()
{
long long int n,k;
while(cin >> n >> k)
{
if(n==0 && k==0)
{
cout << "Ok!" << endl;
}
else if(k==0)
{
cout << "Impossib1e!" << endl;
}
else if(n==0)
{
cout << "Ok!" << endl;
}
else
{
while(n>0)
{
n=n-k;
if(n==0)
{
cout << "Ok!" << endl;
}
}
if(n<0)
{
cout << "Impossib1e!" << endl;
}
}
}
return 0;
}
```
## b186 97七區資訊學科1(改編)
```cpp=
#include <iostream>
using namespace std;
int main()
{
long long int co,ch,ca;
while(cin >> co >> ch >>ca)
{
if(co/10>=1 && ca/2>=1 && co/10>=ca/2)
{
cout << co << " 個餅乾," << ch+ca/2 << " 盒巧克力," << ca << " 個蛋糕。" << endl;
}
else if(co/10>=1 && ca/2>=1 && co/10<ca/2)
{
cout << co << " 個餅乾," << ch+co/10 << " 盒巧克力," << ca << " 個蛋糕。" << endl;
}
else
{
cout << co << " 個餅乾," << ch << " 盒巧克力," << ca << " 個蛋糕。"<<endl;
}
}
return 0;
}
```
## a005 Eva 的回家作業
```cpp=
#include <iostream>
using namespace std;
int main()
{
long long int t,a,b,c,d;
cin >> t;
while(t--)
{
cin >> a >> b >> c >> d;
if(d-c==c-b && c-b==b-a)
{
cout << a << " " << b << " " << c << " " << d << " " << 2*d-c << endl;
}
else
{
cout << a << " " << b << " " << c << " " << d << " " << d*d/c << endl;
}
}
return 0;
}
```
## d502 第三題:產品包裝
```cpp=
#include <iostream>
using namespace std;
int main()
{
unsigned int a,b,c,d,abox=0,sum=0;
while(cin >> a >> b >> c >> d)
{
int em=(c*37)+(64-8*(b%8));
if(a<=em)
{
abox=0;
}
else
{
if(a>em)
{
abox=(a-em)/64;
}
if(abox==0)
{
abox+=1;
}
}
sum=d+c+b/8+abox;
if(b%8!=0)
{
sum+=1;
}
cout << sum << endl;
}
return 0;
}
```
# *III 迴圈*
## EX_05 計算n!
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n,sum=1;
cout << "請輸入n:";
cin >> n;
for(int i=1;i<=n;i++)
{
sum*=i;
}
cout << sum;
return 0;
}
```
## EX_06 3層聖誕樹
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "請輸入n:" ;
cin >> n ;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=(n-i)+2;j++)
{
cout << " " ;
}
for(int j=1;j<=2*i-1;j++)
{
cout << "*" ;
}
cout << endl;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=(n-i)+1;j++)
{
cout << " " ;
}
for(int j=1;j<=(2*i+1);j++)
{
cout << "*" ;
}
cout << endl;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n-i;j++)
{
cout << " " ;
}
for(int j=1;j<=2*i+3;j++)
{
cout << "*" ;
}
cout << endl;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=(2*n+3)/3;j++)
{
cout << " " ;
}
for(int j=1;j<=(2*n+3)/3;j++)
{
cout << "*" ;
}
cout << endl;
}
return 0;
}
```
## EX_07 存錢買手機(While)
```cpp=
#include <iostream>
using namespace std;
int main()
{
int i=1,sum=0,money;
while(sum<36000)
{
cout << "請輸入第 " << i << " 個月的存款: ";
cin >> money;
sum+=money;
i++;
}
cout << "存了 " << i-1 << " 個月,總共 " << sum;
}
```
## EX_08 小算盤開根號
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
bool sol=false;
cin >> n;
for(int i=0;i<=n/2;i++)
{
if(i*i==n)
{
cout << i;
sol=true;
break;
}
}
if(!sol)
{
cout << "只能求完全平方數的平方根!" << endl;
}
return 0;
}
```
## EX_09 小算盤開根號(二分搜尋法)
```cpp=
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double n,lower,upper,mid;
int cnt=0;
cin >> n;
lower=0;
upper=n;
while(upper-lower>1e-13)
{
mid=(upper+lower)/2;
cnt++;
if(mid*mid>n)
upper=mid;
else if(mid*mid<n)
lower=mid;
else
break;
}
printf("經過了 %d 次運算,根號 %f 為 %.13f", cnt,n,mid);
return 0;
}
```
## EX_10 小算盤開根號(牛頓法)
```cpp=
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double a,n;
int cnt=0;
cin >> n;
a=n;
do
{
a=(a*a+n)/(2*a);
cnt++;
}while(a*a-n>1e-13);
printf("經過了 %d 次運算,根號 %f 為 %.13f",cnt,n,a);
return 0;
}
```
## d010 盈數、虧數和完全數
```cpp=
#include <iostream>
using namespace std;
int main()
{
int N,S=0;
while(cin >> N)
{
for(int i=1;i<N;i++)
{
if(N%i==0)
S+=i;
}
if(S<N)
cout << "虧數" << endl;
else if(S==N)
cout << "完全數" << endl;
else if(S>N)
cout << "盈數" << endl;
S=0;
}
return 0;
}
```
## d490 我也愛偶數
```cpp=
#include <iostream>
using namespace std;
int main()
{
int a,b;
while(cin >> a >> b)
{
int sum=0;
for(int i=a;i<=b;i++)
{
if(i%2==0)
{
sum=sum+i;
}
}
cout << sum << endl;
}
return 0;
}
```
## d074 電腦教室
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >>n)
{
int m=-1,p;
for(int i=0;i<n;i++)
{
cin >> p;
if(m<p)
{
m=p;
}
}
cout << m << endl;
}
return 0;
}
```
## a215 明明愛數數
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n,m;
while(cin >> n >> m)
{
int sum=0,cnt=0;
do
{
sum+=n;
cnt++;
n++;
}while(sum<=m);
cout << cnt << endl;
}
return 0;
}
```
## a024 最大公因數(GCD)-1
```cpp=
#include <iostream>
using namespace std;
int main()
{
int a,b;
while(cin >> a >> b)
{
for(int i=min(a,b);i>=1;i--)
{
if(a%i==0 && b%i==0)
{
cout << i << " " << endl;
break;
}
}
}
return 0;
}
```
## a024 最大公因數(GCD)-2
```cpp=
#include <iostream>
using namespace std;
int main()
{
int a,b;
while(cin >> a >> b)
{
int r;
do
{
r=a%b;
a=b;
b=r;
}while(r>0);
cout << a << endl;
}
return 0;
}
```
## a149 乘乘樂 (1)
```cpp=
#include <iostream>
using namespace std;
int main()
{
int T;
cin >> T;
while(T--)
{
int n,sum=1;
cin >>n;
do
{
sum*=n%10;
n/=10;
}while(n>0);
cout << sum << endl;
}
return 0;
}
```
## c418 Bert的三角形 (1)
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
cout << "*";
}
cout << endl;
}
}
return 0;
}
```
## c418 Bert的三角形 (2)
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n-i;j++)
{
cout << "_";
}
for(int j=1;j<=i;j++)
{
cout << "*";
}
cout << endl;
}
}
return 0;
}
```
## c420 Bert的三角形 (3)
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n-i;j++)
{
cout << "_";
}
for(int j=1;j<=2*i-1;j++)
{
cout << "*";
}
for(int j=1;j<=n-i;j++)
{
cout << "_";
}
cout << endl;
}
}
return 0;
}
```
## d498 我不說髒話
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
for(int i=n;i>0;i--)
{
cout << "I don't say swear words!" << endl;
}
}
return 0;
}
```
## d186 11461 - Square Numbers
```cpp=
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a,b;
while(cin >> a >> b)
{
if(sqrt(a)!=floor(sqrt(a)))
cout << floor(sqrt(b))-floor(sqrt(a));
else if(a!=0 && b!=0)
cout << floor(sqrt(b))-floor(sqrt(a))+1;
cout << endl;
}
return 0;
}
```
## a248 新手訓練 ~ 陣列應用
```cpp=
#include <iostream>
using namespace std;
int main()
{
int a,b,N;
while(cin >> a >> b >> N)
{
cout << a/b << ".";
while(N--)
{
a=a%b*10;
cout << a/b;
}
cout << endl;
}
return 0;
}
```
# *IV 陣列*
:::info
int arr[5]; // 宣告一個大小為5的int陣列
arr[0]=80; // 陣列的索引值由0開始
arr[5]=90; // 索引值0~4
int arr[5] = { 1, 3, 5, 7, 9 }; // 宣告陣列時設定初值
int arr[5] = { 1 }; // arr[0]初值1,其餘預設為0
int arr[] = { 1, 3, 5, 7, 9 }; // 陣列大小依初值自動計算
int arr2D[4][2]; // 宣告二維陣列(多維陣列)
int arr2D[4][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
:::
## EX_11 樂透選號器
```cpp=
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int num[6];
int mark[50]={0};
int t;
srand(time(NULL));
for(int i=0;i<6;i++)
{
do
{
t=rand()%49+1;
}while(mark[t]==1);
num[i]=t;
mark[t]=1;
}
for(int i=0;i<6;i++)
{
for(int j=0;j<5;j++)
{
if(num[j]>num[j+1])
{
int t;
t=num[j];
num[j]=num[j+1];
num[j+1]=t;
}
}
}
for (int i=0;i<6;i++)
{
cout << num[i] << " ";
}
return 0;
}
```
## EX_12 求學測總級分和平均
```cpp=
#include <iostream>
using namespace std;
int main()
{
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}};
for(int i=0;i<4;i++)
{
int sum=0;
for(int j=0;j<8;j++)
{
sum+=score[i][j];
}
score[i][5]=sum;
score[i][6]=sum/5;
}
for(int i=0;i<4;i++)
{
int p=0;
for(int j=0;j<4;j++)
{
if (score[i][5]<score[j][5])
{
p++;
}
score[i][7]=p+1;
}
}
cout << "座號\t國文\t英文\t數學\t自然\t社會\t總分\t平均\t名次\n";
for(int i=0;i<4;i++)
{
cout << i+1 << "\t";
for(int j=0;j<8;j++)
{
cout << score[i][j] << "\t";
}
cout <<endl;
}
return 0;
}
```
## b138 NOIP2005 1.陶陶摘苹果
```cpp=
#include <iostream>
using namespace std;
int main()
{
int apl[10];
int h,sum=0;
for(int i=0;i<10;i++)
{
cin >> apl[i];
}
cin >> h;
for(int i=0;i<10;i++)
{
if(h+30>=apl[i])
sum+=1;
}
cout << sum << endl;
sum=0;
return 0;
}
```
## b127 會議中心(Room)
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
int num[n];
num[0]=1;
num[1]=1;
for(int i=2;i<=n;i++)
{
num[i]=num[i-1]+num[i-2];
}
cout << num[n] << endl;
}
return 0;
}
```
## a034 二進位制轉換
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
int a[128];
while(cin >> n)
{
int i=0;
while(n>0)
{
a[i]=n%2;
n/=2;
i++;
}
for(int j=i-1;j>=0;j--)
{
cout << a[j];
}
cout << endl;
}
return 0;
}
```
## b139 NOIP2005 2.校门外的树
```cpp=
#include <iostream>
using namespace std;
int main()
{
int L,M;
while(cin >> L >> M)
{
int l[L+1],sum=0;
for(int i=0;i<=L;i++)
{
l[i]=0;
}
for(int j=M;j>0;j--)
{
int a,b;
cin >> a >> b;
for(int i=a;i<=b;i++)
{
l[i]=1;
}
}
for(int i=0;i<=L;i++)
{
if(l[i]==0)
sum+=1;
}
cout << sum << endl;
}
return 0;
}
```
## d212 東東爬階梯
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
unsigned long long int f[100]={1,1};
for(int i=2;i<100;i++)
f[i]=f[i-1]+f[i-2];
while(cin >> n)
cout << f[n] << endl;
return 0;
}
```
## c067 Box of Bricks
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n,Set=1;
while(cin >> n && n>0)
{
int h[n],sum=0,ave,mov=0;
for(int i=0;i<n;i++)
{
cin >> h[i];
sum+=h[i];
}
ave=sum/n;
for(int i=0;i<n;i++)
{
if(h[i]>ave)
{
mov+=(h[i]-ave);
}
}
cout << "Set #" << Set++ << endl << "The minimum number of moves is " << mov << ".\n" << endl;
}
return 0;
}
```
## a104 排序
:::info
+ [insertion sort插入排序法](https://kopu.chat/2017/06/22/插入排序insertion-sort/)
:::
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
int s[n];
for(int i=0;i<n;i++)
cin >> s[i];
for(int i=1;i<n;i++)
{
int k=s[i],j=i-1;
while(k<s[j] && j>=0)
{
s[j+1]=s[j];
j--;
}
s[j+1]=k;
}
for(int i=0;i<n;i++)
cout << s[i] << " ";
cout << endl;
}
return 0;
}
```
## d452 二、直線最小距離和
:::info
+ 排序後求中位數,中位數與數組各數的距離和最小
```cpp=
1. #include <cmath>
2. swap():兩個值交換
```
:::
```cpp=
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int N,m;
cin >> N;
while(N--)
{
cin >> m;
int M[m],sum=0;
for(int i=0;i<m;i++)
cin >> M[i];
for(int i=0;i<m-1;i++)
{
int minIdx=i;
for(int j=i+1;j<m;j++)
{
if(M[j]<M[minIdx])
minIdx=j;
}
swap(M[minIdx],M[i]);
}
for(int i=0;i<m;i++)
sum+=abs(M[m/2]-M[i]);
cout << sum << endl;
}
return 0;
}
```
## d153 六、智力测验
:::info
```cpp=
1. #include <algorithm>
2. sort( , ):排序
```
:::
```cpp=
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int T,N;
cin >> T;
while(T--)
{
cin >> N;
int s[N];
for(int i=0;i<N;i++)
cin >> s[i];
sort(s,s+N);
cout << (N%2==1?s[N/2]:s[N/2-1]) << endl;
}
return 0;
}
```
## a694 吞食天地二
:::info
+ C++ IO加速
```cpp=
ios::sync_with_stdio(false);
cin.tie(0);
```
:::
```cpp=
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n,m;
while(cin >> n >> m)
{
int a[n+1][n+1];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin >> a[i][j];
while(m--)
{
int x1,y1,x2,y2,sum=0;
cin >> x1 >> y1 >> x2 >> y2;
for(int i=x1;i<=x2;i++)
for(int j=y1;j<=y2;j++)
sum+=a[i][j];
cout << sum << endl;
}
}
return 0;
}
```
# *V 字元陣列、字串*
:::warning
+ [演算法筆記-字串](https://archive.is/u1lQL)
:::
## a149 乘乘樂 (2)
:::info
```cpp=
#include <cstring>
strlen( )測字串長度
```
:::
```cpp=
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int T;
cin >> T;
while(T--)
{
int sum=1;
char n[11];
cin >> n;
for (int i=0;i<strlen(n);i++)
sum*=(int)n[i]-48;
cout << sum << endl;
}
return 0;
}
```
## d124 3的倍数
```cpp=
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char n[10001];
while(cin >> n)
{
int sum=0;
for (int i=0;i<strlen(n);i++)
sum+=(int)n[i]-48;
cout << (sum%3==0?"yes":"no") << endl;
}
return 0;
}
```
## a782 4. Redundant Acronym Syndrome Syndrome
:::info
+ toupper()將字元變大寫
:::
```cpp=
#include <iostream>
using namespace std;
int main()
{
int last;
string line;
while(getline(cin,line)&& line!="END")
{
cout << (char)toupper(line[0]);
for(int i=1;i<line.size();i++)
{
if(line[i]==' ')
{
cout << (char)toupper(line[i+1]);
last=i+1;
}
}
cout << " ";
for(int i=last;i<line.size();i++)
cout << line[i];
cout << endl;
}
return 0;
}
```
## a011 00494 - Kindergarten Counting Game
:::info
+ isalpha()判斷是否為字元
:::
```cpp=
#include <iostream>
using namespace std;
int main()
{
string line;
while(getline(cin,line))
{
int sum=0;
for(int i=0;i<line.size();i++)
if(isalpha(line[i])&&!isalpha(line[i-1]))
sum++;
cout << sum <<endl;
}
return 0;
}
```
## a022 迴文
:::info
```cpp=
#include<algorithm>
reverse(str.begin(),str.end())
```
:::
```cpp=
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string s;
while(cin >> s)
{
string rev=s;
reverse(s.begin(),s.end());
cout << (s==rev?"yes":"no") <<endl;
}
return 0;
}
```
## a130 12015 - Google is Feeling Lucky
:::info
```cpp=
struct
{
};封裝一組資料
```
:::
```cpp=
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
struct www
{
string name;
int v;
}web[10];
int t,cs=1;
cin >> t;
while(t--)
{
int maxx=0;
for(int i=0;i<10;i++)
{
cin >> web[i].name >> web[i].v;
if(web[i].v>maxx)
maxx=web[i].v;
}
printf("Case #%d:\n",cs++);
for(int i=0;i<10;i++)
{
if(web[i].v==maxx)
cout << web[i].name << endl;
}
}
return 0;
}
```
# *VI 函式*
## EX_13 高中運動會
```cpp=
#include <iostream>
using namespace std;
int gcd(int a,int b)
{
int r;
do
{
r=a%b;
a=b;
b=r;
}while(r>0);
return a;
}
int main()
{
int a=400, b=200, c=150, d=625, g;
g=gcd(a,b);
g=gcd(g,c);
g=gcd(g,d);
cout << g;
return 0;
}
```
## EX_14 寫一函式可以計算n!,並以之求 C(n,k)=n!/(n−k)!∗k!
```cpp=
#include <iostream>
using namespace std;
int f(int n)
{
int sum=1;
for(int i=0;i<n;i++)
{
sum*=i+1;
}
return sum;
}
int main()
{
int n ,k;
cin >> n >> k;
cout << f(n)/(f(n-k)*f(k)) << endl;
return 0;
}
```
## EX_15 求費式數列第n項
```cpp=
#include <iostream>
using namespace std;
int f(int n)
{
if(n==0)
return 0;
else if(n==1)
return 1;
else
return f(n-1)+f(n-2);
}
int main()
{
int n;
cin >> n;
cout << f(n);
return 0;
}
```
## EX_16 以遞迴改寫 EX_13 高中運動會中的gcd函式
```cpp=
#include <iostream>
using namespace std;
int gcd(int a, int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}
int main()
{
int num[8] = {400, 200, 150, 625, 600, 100, 15, 20};
int g=gcd(num[0],num[1]);
for(int i=2;i<8;i++)
g=gcd(g,num[i]);
cout << g;
return 0;
}
```
## EX_17 以遞迴函式計算 n 層香檳塔,總共有幾個杯子
:::info
+ 遞迴式 : f(n)=1 ,if n==1
f(n)=f(n-1)+? ,if n>1
:::
```cpp=
#include <iostream>
using namespace std;
int f(int n)
{
if(n==1)
return 1;
else
return f(n-1)+n;
}
int main()
{
int n;
cin >> n;
cout << f(n);
return 0;
}
```
## EX_18 (Bonus):計算 n 層「三角錐形」香檳塔,總共有幾個杯子
:::info
+ ( 第1層1個、2->3、3->6、4->10、5->15、第n層 n*(n+1)/2 個杯子 )
2017的世界紀錄總共杯子數量為50116,疊了幾層?
:::
```cpp=
#include <iostream>
using namespace std;
int f(int n)
{
if(n==1)
return 1;
else
return f(n-1)+n*(n+1)/2;
}
int main()
{
int n;
cin >> n;
cout << f(n);
return 0;
}
```
## a623 Combination
```cpp=
#include <iostream>
using namespace std;
int f(int k)
{
int sum=1;
for(int i=k;i>0;i--)
{
sum*=i;
}
return sum;
}
int main()
{
int n,m;
while(cin >> n >> m)
{
cout << f(n)/(f(m)*f(n-m)) << endl;
}
return 0;
}
```
## c813 11332 - Summing Digits
```cpp=
#include <iostream>
using namespace std;
int f(int k)
{
int sum=0;
while(k>0)
{
sum+=k%10;
k=k/10;
}
return sum;
}
int g(int n)
{
int l=f(n);
while(l/10!=0)
{
l=f(l);
}
return l;
}
int main()
{
int n;
while(cin >> n && n>0)
{
cout << g(n) << endl;
}
return 0;
}
```
## b112 5.高中運動會
```cpp=
#include <iostream>
using namespace std;
int gcd(int a,int b)
{
int r;
do
{
r=a%b;
a=b;
b=r;
}while(r>0);
return a;
}
int main()
{
int N,n;
while(cin >> N)
{
int g=0,k,l;
cin >> k >> l;
g=gcd(k,l);
for(int i=2;i<N;i++)
{
int x;
cin >> x;
g=gcd(x,g);
}
cout << g << endl;
}
return 0;
}
```
## c002 10696 - f91
```cpp=
#include <iostream>
using namespace std;
int f91(int N)
{
int res;
if(N>=101)
{
res=N-10;
}
else if(N<=100)
{
res=f91(f91(N+11));
}
return res;
}
int main()
{
int N;
while(cin >> N && N>0)
cout << "f91(" << N << ") = " << f91(N) << endl;
return 0;
}
```
## d171 飛蛾撲火(二)
```cpp=
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n,m;
while(cin >> n >> m)
{
cout << floor(m*log10(n)+1) << endl;
}
return 0;
}
```
## c039 00100 - The 3n + 1 problem
```cpp=
#include <iostream>
using namespace std;
int cl(int n)
{
int i=1;
while(n!=1)
{
if(n%2==1)
n=3*n+1;
else
n=n/2;
i++;
}
return i;
}
int main()
{
int a,b;
while(cin >> a >> b)
{
int x=-1;
for(int i=min(a,b); i<=max(a,b); i++)
x=max(x,cl(i));
cout << a << " " << b << " " << x <<endl;
}
return 0;
}
```
## a216 數數愛明明
```cpp=
#include <iostream>
using namespace std;
unsigned long long int f(int n)
{
if (n==1)
return 1;
else
return (n+1)*n/2;
}
unsigned long long int g(int n)
{
if(n==1)
return 1;
else
return f(n)+g(n-1);
}
int main()
{
long long int n;
while(cin >> n)
{
cout << f(n) << " " << g(n) << endl;
}
return 0;
}
```
# *VII其他*
## a002 簡易加法
```cpp=
#include <iostream>
using namespace std;
int main()
{
int a,b;
while(cin >> a >> b)
{
cout << a+b << endl;
}
return 0;
}
```
## a003 兩光法師占卜術
```cpp=
#include <iostream>
#include <cstdio>
using namespace std;
int main(int argc, char *argv[])
{
int m,d,s;
while(cin >> m >>d )
{
s=(m*2+d)%3;
if(s==0)
printf("普通");
else if(s==1)
printf("吉");
else
printf("大吉");
}
return 0;
}
```
## a009 解碼器
```cpp=
#include <iostream>
#include <cstdio>
using namespace std;
int main(int argc, char *argv[])
{
string a;
while(getline(cin,a))
{
if(a=="EOF")
break;
for(int i=0; i<a.size(); i++)
a[i]=(int)a[i]-7;
for(int i=0; i<a.size(); i++)
printf("%c",(char)a[i]);
cout << endl;
}
return 0;
}
```
## d219 00374 - Big Mod
```cpp=
#include <iostream>
using namespace std;
long long int dc(long long int b,long long int p,long long int m)
{
if(p==1)
return b%m;
else if(p==0)
return 1;
else
{
int half=dc(b,p/2,m);
if(p%2==0)
return (half*half%m);
else
return (half*half*b%m);
}
}
int main()
{
long long int b,p,m;
while(cin >> b >> p >> m)
{
cout << dc(b,p,m) << endl;
}
return 0;
}
```
## d984 棄保效應
```cpp=
#include <iostream>
using namespace std;
int main()
{
unsigned int A,B,C;
while(cin >> A >> B >> C)
{
if(A>B+C || C>A && A>B && A+B>C || B>A && A>C && A+C>B)
{
cout << "A" << endl;
}
else if(B>A+C || A>B && B>C && B+C>A || C>B && B>A && B+A>C)
{
cout << "B" << endl;
}
else
{
cout << "C" << endl;
}
}
return 0;
}
```