owned this note
owned this note
Published
Linked with GitHub
ITSA線上程式競賽基礎題目
=======================
## 矩陣數字顯示
```cpp=
#include<iostream>
using namespace std;
int main()
{
int input=0;
string num[10][5][5]={{{"*","*","*","*","*"},{"*"," "," "," ","*"},{"*"," "," "," ","*"},{"*"," "," "," ","*"},{"*","*","*","*","*"}}
,{{" "," "," "," ","*"},{" "," "," "," ","*"},{" "," "," "," ","*"},{" "," "," "," ","*"},{" "," "," "," ","*"}}
,{{"*","*","*","*","*"},{" "," "," "," ","*"},{"*","*","*","*","*"},{"*"," "," "," "," "},{"*","*","*","*","*"}}
,{{"*","*","*","*","*"},{" "," "," "," ","*"},{"*","*","*","*","*"},{" "," "," "," ","*"},{"*","*","*","*","*"}}
,{{"*"," "," "," ","*"},{"*"," "," "," ","*"},{"*","*","*","*","*"},{" "," "," "," ","*"},{" "," "," "," ","*"}}
,{{"*","*","*","*","*"},{"*"," "," "," "," "},{"*","*","*","*","*"},{" "," "," "," ","*"},{"*","*","*","*","*"}}
,{{"*"," "," "," "," "},{"*"," "," "," "," "},{"*","*","*","*","*"},{"*"," "," "," ","*"},{"*","*","*","*","*"}}
,{{"*","*","*","*","*"},{" "," "," "," ","*"},{" "," "," "," ","*"},{" "," "," "," ","*"},{" "," "," "," ","*"}}
,{{"*","*","*","*","*"},{"*"," "," "," ","*"},{"*","*","*","*","*"},{"*"," "," "," ","*"},{"*","*","*","*","*"}}
,{{"*","*","*","*","*"},{"*"," "," "," ","*"},{"*","*","*","*","*"},{" "," "," "," ","*"},{" "," "," "," ","*"}}};
while(cin>>input)//持續讀入
{
for(int i=0;i<5;i++)//將每個數字固定由上排到下排執行
{
int output=input;//會重複執行,所以新設變數已重複利用
int w=1000;//取高位的除數,一樣要重複利用而至此
for(int k=0;k<4;k++)//四個數字
{
int number=0;
number=output/w;//找出最高(左)位數
output%=w;//得到剩下的位數
w/=10;// 將除數遞減
for(int j=0;j<5;j++)//輸出一排
{
cout<<num[number][i][j];//輸出指定位置
}
if(k!=3)cout<<" ";//如果非第四個數字則每排之後空一格
}
cout<<endl;//每排結束需換行
}
}
system("pause");
return 0;
}
```
## 英哩轉公里
```cpp=
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int input;
while(cin>>input)//讀入整數
{
cout<<fixed<<setprecision(1)<<(input*1.6L*10/10)<<endl;
/*輸出<<指定浮點數表示<<小數點後幾位(預設為6)
<<整數轉換小數(乘L)並確保小數點後僅一位<<換行*/
}
system("pause");
return 0;
}
```
## 停車費計算
```cpp=
#include<iostream>
using namespace std;
int main()
{
int startH=0,startM=0,endH=0,endM=0;
cin>>startH>>startM;//讀入開始時間
cin>>endH>>endM;//讀入結束時間
int time=(endH*60+endM)-(startH*60+startM);//計算總時數
if(time<=120&&time>=0) cout<<time/30*30<<endl;//2小時內的費用
else if(time>120&&time<=240) cout<<(time-120)/30*40+120<<endl;//4小時內的費用+2小時的費用
else cout<<(time-240)/30*60+120+160<<endl;//4小時外的費用+4小時的費用+2小時的費用
system("pause");
return 0;
}
```
## 判斷座標是否在圓形的範圍內
```cpp=
#include<iostream>
using namespace std;
int main()
{
int inputx=0,inputy=0;
while(cin>>inputx>>inputy)//依序讀入X,Y值
{
if(inputx*inputx+inputy*inputy <= 10000) cout<<"inside"<<endl;
//若X平方+Y平方小於半徑(100)的平方,輸出"inside"
else cout<<"outside"<<endl;
}
system("pause");
return 0;
}
```
## 十進制轉二進制
```cpp=
#include<iostream>
using namespace std;
int main()
{
int input=0,Bin[8];
cin>>input;
if(input<0) input+=256;//負數則推移至正整數
for(int i=7;i>=0;i--)//逆向遞減輸入
{
Bin[i]=input%2;//將餘數結果存入
input/=2;//每算出一位數則留商數繼續往下算
}
for(int i=0;i<8;i++)//順向依序輸出
{
if(i==7)cout<<Bin[i]<<endl;//若為最後一位則換行
else cout<<Bin[i];//否則緊接在後輸出
}
system("pause");
return 0;
}
```
## 季節判定
```cpp=
#include<iostream>
using namespace std;
int main()
{
int input=0;
cin>>input;
switch(input/3)//取商數為區分點
{
case 1:cout<<"Spring"<<endl;break;//商數為1,(3,4,5)
case 2:cout<<"Summer"<<endl;break;//商數為2,(6,7,8)
case 3:cout<<"Autumn"<<endl;break;//商數為3,(9,10,11)
default :cout<<"Winter"<<endl;//其餘(12(商數為4),1,2)皆為冬季
}
system("pause");
return 0;
}
```
## 複數運算
```cpp=
#include<iostream>
using namespace std;
int main()
{
int input=0;
cin>>input;
while(input--)//依據輸入的行數遞減計算次數
{
int ai=0,a=0,bi=0,b=0;
char w;//運算符號
cin>>w>>ai>>a>>bi>>b;
switch(w)//依據運算符號來決定計算方式
{//依據運算符號輸出計算公式的答案
case '+':cout<<ai+bi<<" "<<a+b<<endl;break;
case '-':cout<<ai-bi<<" "<<a-b<<endl;break;
case '*':cout<<ai*bi-a*b<<" "<<a*bi+ai*b<<endl;break;
case '/':cout<<(ai*bi+a*b)/(bi*bi+b*b)<<" "<<a*bi-ai*b/(bi*bi+b*b)<<endl;break;
}
}
system("pause");
return 0;
}
```
## 質數判別
```cpp=
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int input=0,output=0;
bool end=0;
while(cin>>input)
{
input==1?end=true:end=false;//判斷是否為1
output=sqrt(input)*10/10;//根號找出其因數列的中位數(最接近的數,不一定就是中位數)
for(int i=output;i>1;i--)//開始往下尋找能整除的數
{
input%i==0?end=true:end=false;
if(end==true) break;//找到則跳脫迴圈
}
end?cout<<"NO"<<endl:cout<<"YES"<<endl;//輸出結果
}
system("pause");
return 0;
}
```
## 計算正整數被3整除之數值之總和
```cpp=
#include<iostream>
using namespace std;
int main()
{
int input=0,i=0;
cin>>input;
for(i=input;i>=input-2;i--)//找出最近的3的倍數
{
if(i%3) continue;
else break;
}
cout<<i/3*(3+i)/2<<endl;//得到總和(等差級數和公式)
system("pause");
return 0;
}
```
## 輾轉相除法
```cpp=
#include<iostream>
using namespace std;
int euc(int a,int b);//輾轉相除法遞迴函式宣告
int main()
{
int input=0,input2=0,c=0;
cin>>input>>input2;
if(input<input2)//確認大小順序
{
c=input;
input=input2;
input2=c;
}
cout<<euc(input,input2)<<endl;
return 0;
}
int euc(int a,int b)
{
int f=a%b;
if(f==0) return b;
else return euc(b,f);
}
```
## 矩陣反轉
```cpp=
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
int inputBus=0,inputLine=0;
cin>>inputBus>>inputLine;//輸入陣列大小
cin.ignore(1,'\n');//整數後讀字串,需先消除隱藏於後的"\n"
int reArray[inputLine][inputBus];//產生陣列
for(int bus=0;bus<inputBus;bus++)//讀入次數即列數
{
string nums;
getline(cin,nums);
istringstream cutStr(nums);
for(int line=0;line<inputLine;line++)//字串分割數即行數
{
string save;
getline(cutStr,save,' ');
istringstream chType(save);
chType>>reArray[line][bus];//一一讀入指定的反矩陣座標
}
}
for(int i=0;i<inputLine;i++)//輸出反矩陣座標
{
for(int j=0;j<inputBus;j++)
{
if(j==inputBus-1) cout<<reArray[i][j]<<endl;
else cout<<reArray[i][j]<<" ";
}
}
system("pause");
return 0;
}
```
## 遞迴程式練習
```cpp=
#include<iostream>
#include<cmath>
using namespace std;
int m (int input);
int main()
{
int input=0;
cin>>input;//輸入整數
cout<<m(input)<<endl;//輸出函式的值
system("pause");
return 0;
}
int m (int input)
{
if(input==0||input==1)//當輸入值為1或0
{
return input+1;
}
else return m(input-1)+m(ceil(input/2));
//因題目寫明,輸入值為大於1的整數,所以不需擔心負值
}
```
## 撲克牌大小
```cpp=
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
using namespace std;
void sortPoke (vector<string>& a,int n);
int main()
{
int input=0,n=0;
string Str,s;
vector<string> pokeS;
cin>>input;//輸入測試資料筆數
cin.ignore(1,'\n');//消除於字串後的換行符號
for(int i=0;i<input;i++)//依資料筆數決定處理次數
{
getline(cin,Str);//讀入一整行
istringstream cutStr(Str);//轉換成可分割型態
while(getline(cutStr,s,' '))//分割並推入向量
{
pokeS.push_back(s);
}
sortPoke(pokeS,pokeS.size());//排序
for(int j=0;j<pokeS.size();j++)//輸出排序結果
{
if(j==pokeS.size()-1) cout<<pokeS[j]<<endl;
else cout<<pokeS[j]<<" ";
}
pokeS.clear();//清空向量給下一筆測資
}
return 0;
}
void sortPoke (vector<string>& a,int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
string t;
if(a[i][0]>a[j][0]){t=a[i];a[i]=a[j];a[j]=t;}
}
}
//以上為泡沫排序法
for(int i=0;i<n;i++)
{
for(int j=0+i;j<n;j++)
{
if(a[i][0]==a[j][0])
{//針對其數字不同進行轉換型態後比較
string t,bN=a[i].substr(1,2),sN=a[j].substr(1,2);
istringstream bigN(bN);
istringstream smaN(sN);
int b=0,s=0;
bigN>>b;smaN>>s;
if(b<s){t=a[i];a[i]=a[j];a[j]=t;}
}
}
}
//最後進行同花色間的排序
}
```
## 判斷是否為迴文
```cpp=
#include<iostream>
#include<string>
using namespace std;
int main()
{
string input,output;
bool a=1;
cin>>input;
for(int i=input.length()-1;i>=0;i--)//將字串逆序傳到output
{
output[input.length()-1-i]=input[i];
}
for(int j=0;j<input.length();j++)//比較是否有異
{
if(input[j]!=output[j]){a=0;break;}//發現有異即時跳出
else a=1;
}
a?cout<<"YES"<<endl:cout<<"NO"<<endl;//輸出結果
return 0;
}
```
## 文字及字母出現次數
```cpp=
#include<iostream>
#include<string>
#include<sstream>
#include<map>
using namespace std;
int main()
{
string input,save;
int wordsNum=0;
map<char,int> wF;
string w="aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
getline(cin,input);
istringstream cutStr(input);
while(getline(cutStr,save,' '))
{
wordsNum++;//計算單字數
for(int j=0;j<save.length();j++)//統計字數
{
if(wF.count(save[j])==0){wF.insert(make_pair(save[j],1));}
else wF[save[j]]+=1;
}
}
cout<<wordsNum<<endl;//輸出單字數
for(int k=0;k<52;k++)//調整為題目輸出順序(原順序為先大寫再小寫)
{
for(map<char,int>::iterator p=wF.begin();p!=wF.end();p++)
{
if(w[k]==p->first&&p->second!=0)
cout<<p->first<<" "<<":"<<" "<<p->second<<endl;
}
}
return 0;
}
```
## 子字串出現次數
```cpp=
#include<iostream>
#include<string>
using namespace std;
int appearNum(string& s,int p,string& l);
int main()
{
string inputS,inputL,save;
cin>>inputS>>inputL;
cout<<appearNum(inputS,0,inputL)<<endl;
return 0;
}
int appearNum(string& s,int p,string& l)//字串遞迴(檢索字串,起始位置,被檢索字串)
{
int a=0;
if(p>l.length())return a=0;//若偏移長度大於被檢索字串長度則回傳0
for(int i=0;i<s.length();i++)//依檢索字串長度進行迴圈
{
if(l[i+p]==s[i])continue;//若比對符合,則持續比對至完全符合
else return a+=appearNum(s,p+1,l);//比對不符回傳當前符合次數
}
a++;return a+=appearNum(s,p+1,l);//迴圈完畢表示比對完全符合,計次後往右偏移再測試
}
```
## 英文斷詞
```cpp=
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include<cctype>
using namespace std;
int main()
{
string input,save;
vector<string> count;
getline(cin,input);
istringstream cutStr(input);
while(getline(cutStr,save,' '))
{
for(int j=0;j<save.length();j++)
{
save[j]=tolower(save[j]);
}
count.push_back(save);
}//將讀入的整行字串拆解並讀入
for(int i=count.size()-1;i>0;i--)//從尾開始往前尋找重複的並移除
{
for(int j=i-1;j>=0;j--)
{
if(count[i]==count[j]){count.erase(count.begin()+i);break;}
}
}
for(int i=0;i<count.size();i++)//整理後依序輸出
{
if(i==count.size()-1)cout<<count[i]<<endl;
else cout<<count[i]<<" ";
}
return 0;
}
```
## QWERTY
```cpp=
#include<iostream>
#include<map>
#include<cctype>
#include<string>
using namespace std;
int main()
{
string input;
map<char,char> key;
//因會將大寫轉小寫,固不必將大寫加入字典,其餘依題目要求輸入
key.insert(make_pair(' ',' '));key.insert(make_pair('!','@'));
key.insert(make_pair('"','"'));key.insert(make_pair('#','$'));
key.insert(make_pair('$','%'));key.insert(make_pair('%','^'));
key.insert(make_pair('&','*'));key.insert(make_pair('\'','\''));
key.insert(make_pair('(',')'));key.insert(make_pair(')','_'));
key.insert(make_pair('*','('));key.insert(make_pair('+','+'));
key.insert(make_pair(',','.'));key.insert(make_pair('-','='));
key.insert(make_pair('.','/'));key.insert(make_pair('/','/'));
key.insert(make_pair('0','-'));key.insert(make_pair('1','2'));
key.insert(make_pair('2','3'));key.insert(make_pair('3','4'));
key.insert(make_pair('4','5'));key.insert(make_pair('5','6'));
key.insert(make_pair('6','7'));key.insert(make_pair('7','8'));
key.insert(make_pair('8','9'));key.insert(make_pair('9','0'));
key.insert(make_pair(':','\"'));key.insert(make_pair(';','\''));
key.insert(make_pair('<','>'));key.insert(make_pair('=','='));
key.insert(make_pair('>','?'));key.insert(make_pair('?','?'));
key.insert(make_pair('@','#'));key.insert(make_pair('a','s'));
key.insert(make_pair('b','n'));key.insert(make_pair('c','v'));
key.insert(make_pair('d','f'));key.insert(make_pair('e','r'));
key.insert(make_pair('f','g'));key.insert(make_pair('h','j'));
key.insert(make_pair('g','h'));key.insert(make_pair('i','o'));
key.insert(make_pair('j','k'));key.insert(make_pair('k','l'));
key.insert(make_pair('l',';'));key.insert(make_pair('m',','));
key.insert(make_pair('n','m'));key.insert(make_pair('o','p'));
key.insert(make_pair('p','['));key.insert(make_pair('q','w'));
key.insert(make_pair('r','t'));key.insert(make_pair('s','d'));
key.insert(make_pair('t','y'));key.insert(make_pair('u','i'));
key.insert(make_pair('v','b'));key.insert(make_pair('w','e'));
key.insert(make_pair('x','c'));key.insert(make_pair('y','u'));
key.insert(make_pair('z','x'));key.insert(make_pair('[',']'));
key.insert(make_pair('\\','\\'));key.insert(make_pair(']','\\'));
key.insert(make_pair('^','&'));key.insert(make_pair('_','='));
key.insert(make_pair('`','1'));key.insert(make_pair('{','}'));
key.insert(make_pair('|','|'));key.insert(make_pair('}','|'));
key.insert(make_pair('~','!'));
getline(cin,input);
for(int i=0;i<input.length();i++)//把輸入的字串全轉小寫
{
input[i]=tolower(input[i]);
}
for(int i=0;i<input.length();i++)//依字串的順序比對並輸出
{
for(map<char,char>::iterator p=key.begin();p!=key.end();p++)
{
if(input[i]==p->first)cout<<p->second;
if(input[i]==p->first&&i==input.length()-1)cout<<endl;
}
}
return 0;
}
```
## 最少派車數
```cpp=
#include<iostream>
using namespace std;
int main()
{
int inputN=0,t[24]={0};//一天24小時
cin>>inputN;
for(int i=0;i<inputN;i++)//因為(返回時間恆大於出發時間),故依輸入時間依序填格子
{
int a=0,b=0;
cin>>a>>b;
for(int j=a-1;j<b-1;j++){t[j]++;}
}
inputN=t[0];//將不需要的空間再次利用
for(int i=0;i<24;i++){if(inputN<t[i])inputN=t[i];}//尋最大值
cout<<inputN<<endl;
return 0;
}
```
## 大整數加法 (java)
```java=
import java.math.BigInteger;
import java.util.*;
public class Itsa20 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
BigInteger arr,tot;
for(int i=0;i<n;i++){
arr=sc.nextBigInteger();
tot=sc.nextBigInteger();
System.out.println(tot.add(arr));
}
}
}
```
## 最大值與最小值 (java)
```java=
import java.util.*;
import java.text.DecimalFormat;
public class Itsa21 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
DecimalFormat f=new DecimalFormat("0.00");//要注意到用"#"的話,0會被省略掉
float input=0,ar[]=new float[10],max=ar[0],min=ar[0];
for(int i=0;i<10;i++)
{
input=sc.nextFloat();
ar[i]=input;
if(ar[i]>max)max=ar[i];
if(ar[i]<min)min=ar[i];
}
System.out.println("maximum:"+f.format(max));
System.out.println("minimum:"+f.format(min));
}
}
```
## 圈圈叉叉
```cpp=
#include<iostream>
using namespace std;
int main(){
int arr[3][3];//開井字陣列
for(int i=0;i<3;i++)//3排讀三次
{
cin>>arr[i][0]>>arr[i][1]>>arr[i][2];//依序輸入
if(arr[i][0]==arr[i][1]&&arr[i][1]==arr[i][2])//直接進行整排檢查
{
cout<<"True"<<endl;
return 0;}
}
for(int x=0;x<3;x++)//直行檢查
{
if(arr[0][x]==arr[1][x]&&arr[1][x]==arr[2][x])
{
cout<<"True"<<endl;return 0;}}
if(arr[0][0]==arr[1][1]&&arr[1][1]==arr[2][2])//反斜線檢查
{
cout<<"True"<<endl;return 0;}
else if(arr[0][2]==arr[1][1]&&arr[1][1]==arr[2][0])//斜線檢查
{
cout<<"True"<<endl;return 0;}
else cout<<"False"<<endl;return 0;//都沒有
}
```
## 找零錢問題
```cpp=
#include<iostream>
#include<sstream>
using namespace std;
int main(){
string input,str;
int mon[4];
getline(cin,input);
istringstream cut(input);
for(int i=0;i<4;i++)//逐一拆字讀入陣列
{
getline(cut,str,',');
istringstream sa(str);
sa>>mon[i];
}
if(mon[0]>mon[1]*15+mon[2]*20+mon[3]*30)//判定零錢是否足夠,同時重複利用陣列空間
{
mon[0]=mon[0]-mon[1]*15-mon[2]*20-mon[3]*30;//結算剩餘金額
mon[2]=mon[0]/50;mon[0]%=50;
mon[1]=mon[0]/5;mon[0]%=5;
cout<<mon[0]<<","<<mon[1]<<","<<mon[2]<<endl;return 0;
}
else cout<<"0"<<endl;return 0;//金額不足
}
```
## 計算複利
```cpp=
#include<iostream>
#include<cmath>
using namespace std;
void m(double r,int p,int n);
int main(){
double r=0;
int n=0,p=0;
cin>>r>>n>>p;
m(r,p,n);
return 0;
}
void m(double r,int p,int n)
{
int s=p,pm[30],pt[30],rr=floor(r*1000);;
for(int i=0;i<30;i++)
{
if(i>=0&&i<11)pm[i]=0;
else {pm[i]=p%10;p/=10;}
pt[i]=0;
}
for(int k=0;k<n;k++)
{
for(int i=0;i<30;i++)//p=p*r
{
pt[i]+=pm[i]*rr;
}
for(int i=0;i<30;i++)//整數進位
{
pt[i+1]+=pt[i]/10;
pt[i]%=10;
}
for(int i=3;i<30;i++)//整數移位
{
pt[i-3]=pt[i];
}
for(int i=0;i<30;i++)//p+=p
{
pt[i]+=pm[i];
}
for(int i=0;i<30;i++)//整數進位
{
pt[i+1]+=pt[i]/10;
pt[i]%=10;
}
if(k==n-1)//是否繼續計算複利
{
bool t=0;//判定是否為不輸出的空值
for(int i=29;i>=11;i--)
{
if(pt[i]!=0||t!=0)//尋找首個非零值並輸出之後的零
{
t++;
cout<<pt[i];
if(i==11)cout<<endl;//結尾則換行
}
else continue;
}
}
else
{
pt[11]+=s;
for(int i=0;i<30;i++)
{
pm[i]=pt[i];
pt[i]=0;
}
}
}
}
```
## 字串之編碼數值總和
```cpp=
#include<iostream>
using namespace std;
int main()
{
int input=0;
cin>>input;
cin.ignore(1,'\n');//整數後讀字串需消除\n
while(input--)
{
string s;
int sum=0;
getline(cin,s);
for(int i=0;i<s.length();i++)//依字串長度進行字元轉換ASCII碼並加總
{
sum+=(int)s[i];
}
cout<<sum<<endl;
}
return 0;
}
```
## 各位數和排序
```cpp=
#include<iostream>
#include<sstream>
using namespace std;
void sort(int c[],int& m);
int main()
{
int in=0;
cin>>in;
int ar[in];//太早設導致"ar[0]",衍伸"無效記憶體引用"
for(int i=0;i<in;i++){cin>>ar[i];}
sort(ar,in);
for(int i=in-1;i>=0;i--){if(i==0){cout<<ar[i]<<endl;}else cout<<ar[i]<<" ";}
return 0;
}
void sort(int c[],int& m)
{
int b[m],a=0;
for(int j=0;j<m;j++)//依序求出總和值
{
b[j]=0;a=c[j];
while(a>0)
{
b[j]+=a%10;
a/=10;
}
}
for(int i=0;i<m;i++)//泡泡排序
{
for(int j=0;j<m;j++)
{
if(b[i]>b[j]||(b[i]==b[j]&&c[i]>c[j]))
{
int tc=0,tb=0;
tb=b[i];b[i]=b[j];b[j]=tb;
tc=c[i];c[i]=c[j];c[j]=tc;
}
}
}
}
```
## 猜數字
```cpp=
#include<iostream>
using namespace std;
int main()
{
int an=0,ana[4],ain[4];
cin>>an;
for(int i=3;i>=0;i--)//逆向讀入陣列
{
ana[i]=0;ain[i]=0;
ana[i]=an%10;an/=10;
}
while(true)//保持無限迴圈狀態
{
int in=0,a=0,b=0;
cin>>in;
an=0;//解除無限迴圈用
for(int i=3;i>=0;i--)//確保位置與答案相同
{
ain[i]=in%10;in/=10;//逆向讀入陣列
if(ain[i]==0)an++;//判定0的個數
if(ain[i]==ana[i]){a++;continue;}//確認同位置且同答案
else {for(int j=0;j<4;j++){if(ain[i]==ana[j]&&j!=i){b++;break;}}}//尋找其餘3個的位置是否有同樣答案
}
if(an==4)break;//判定是否4個0
else cout<<a<<"A"<<b<<"B"<<endl;//輸出答案
}
return 0;
}
```
## 統一發票對獎 (java)
```java=
import java.util.*;
public class itsa28 {
public static void main(String[] args)
{
Scanner s=new Scanner(System.in);
String f,st[]=new String[4];
for(int i=0;i<4;i++) {f=s.next();st[i]=f;}
int n=s.nextInt(),mon=0,m[]=new int[7];
String inp[]=new String[n];
for(int i=0;i<n;i++) {f=s.next();inp[i]=f;}
for(int i=0;i<n;i++)
{
if (st[0].equals(inp[i])) {m[0]++;mon+=2000000;continue;}
for (int j=0;j<=5;j++)
{
if (inp[i].indexOf(st[1].substring(j),j)>=0){m[j+1]++;break;}
else if (inp[i].indexOf(st[2].substring(j),j)>=0){m[j+1]++;break;}
else if (inp[i].indexOf(st[3].substring(j),j)>=0) {m[j+1]++;break;}
}
}
for(int i=0;i<7;i++) {if(i==6) {System.out.println(m[i]);}else {System.out.print(m[i]+" ");}}
mon+=200000*m[1]+40000*m[2]+10000*m[3]+4000*m[4]+1000*m[5]+200*m[6];
System.out.println(mon);
}
}
```
## 身分證驗證器
```cpp=
#include<iostream>
using namespace std;
int main()
{
string in;
getline(cin,in);
if(((int)in[1]-'0')<1||((int)in[1]-'0')>2){cout<<"WRONG!!!"<<endl;return 0;}//性別檢測
for(int i=1;i<9;i++)//數字區域是否為數字
{
if(in[i]<'0'||in[i]>'9'){cout<<"WRONG!!!"<<endl;return 0;}
}
int p=0,loc=0;
loc=(int)in[0];
if(loc<'A'||loc>'Z'){cout<<"WRONG!!!"<<endl;return 0;}//區域碼轉換
else if(loc<=72){loc-=55;}//A~H
else if(loc==73){loc=34;}//I
else if(loc>73&&loc<=78){loc-=56;}//J~N
else if(loc==79){loc=35;}//O
else if(loc>79&&loc<=86||loc==90){loc-=57;}//P~V && Z
else if(loc==87){loc=32;}//W
else if(loc>87&&loc<=89){loc-=58;}//X、Y
p=(loc/10)+9*(loc%10);//取十位數再加上個位數*9
for(int i=1;i<9;i++){p+=(9-i)*((int)in[i]-'0');}//加上之後的公式總和
if(10-(p%10)!=((int)in[9]-'0')){cout<<"WRONG!!!"<<endl;return 0;}//檢查碼判定
else {cout<<"CORRECT!!!"<<endl;return 0;}
}
```
## 星座查詢
```cpp=
#include<iostream>
using namespace std;
int main()
{
string in;//因輸入的月有"0"在,故改字串
getline(cin,in);
int m=10*((int)in[0]-'0')+((int)in[1]-'0');//月轉數字
int d=10*((int)in[3]-'0')+((int)in[4]-'0');//日轉數字
switch(m)
{
case 1:d<21?cout<<"Capricorn"<<endl:cout<<"Aquarius"<<endl;break;
case 2:d<19?cout<<"Aquarius"<<endl:cout<<"Pisces"<<endl;break;
case 3:d<21?cout<<"Pisces"<<endl:cout<<"Aries"<<endl;break;
case 4:d<21?cout<<"Aries"<<endl:cout<<"Taurus"<<endl;break;
case 5:d<22?cout<<"Taurus"<<endl:cout<<"Gemini"<<endl;break;
case 6:d<22?cout<<"Gemini"<<endl:cout<<"Cancer"<<endl;break;
case 7:d<23?cout<<"Cancer"<<endl:cout<<"Leo"<<endl;break;
case 8:d<24?cout<<"Leo"<<endl:cout<<"Virgo"<<endl;break;
case 9:d<24?cout<<"Virgo"<<endl:cout<<"Libra"<<endl;break;
case 10:d<24?cout<<"Libra"<<endl:cout<<"Scorpio"<<endl;break;
case 11:d<23?cout<<"Scorpio"<<endl:cout<<"Sagittarius"<<endl;break;
case 12:d<22?cout<<"Sagittarius"<<endl:cout<<"Capricorn"<<endl;break;
}
return 0;
}
```
## 過半元素
```cpp=
#include<iostream>
#include<sstream>
#include<map>
using namespace std;
int main()
{
map<int,int> c;
string num,ss;
while(getline(cin,num))//題目說明測資不只一筆(多行),加上長短不一
{
int a=0;//計算該筆測資長度
string n;
istringstream cut(num);
while(getline(cut,n,' '))//推入向量的同時並計數
{
int t=0;
istringstream ss(n);
ss>>t;a++;
if(c.count(t)==0){c.insert(make_pair(t,1));}
else c[t]+=1;
}
int maxf=0,maxs=0;
for(map<int,int>::iterator p=c.begin();p!=c.end();p++)
{//走訪尋找最多次者
if(p->second>maxs){maxs=p->second;maxf=p->first;}
}
maxs>a/2?cout<<maxf<<endl:cout<<"NO"<<endl;//判定是否過半
c.clear();
}
return 0;
}
```
## 字母往後移
```cpp=
#include<iostream>
#include<string>
using namespace std;
int main()
{
string in;
getline(cin,in);
int p=0;cin>>p;
for(int i=0;i<in.length();i++)
{
if((int)in[i]>='A'&&(int)in[i]<='Z')
{
in[i]=(char)(((int)(in[i]-'A')+p)%26+'A');
}
if((int)in[i]>='a'&&(int)in[i]<='z')
{
in[i]=(char)(((int)(in[i]-'a')+p)%26+'a');
}
if((int)in[i]>='0'&&(int)in[i]<='9')
{
in[i]=(char)(((int)(in[i]-'0')+p)%10+'0');
}
}
cout<<in<<endl;in=" ";
return 0;
}
```
## 一整數序列所含之整數個數及平均值 (java)
```java=
import java.text.*;
import java.util.*;
public class itsa33 {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
while(true) //因多行唯一筆測資
{
String nums=s.nextLine(),n[]=nums.split(" ");
double sum=0;
for(int i=0;i<n.length;i++){int input=Integer.parseInt(n[i]);sum+=input;}
DecimalFormat f = new DecimalFormat("0.000");
System.out.println("Size: "+n.length);
System.out.println("Average: "+f.format(sum/n.length));
}
}
}
```
## 標準體重計算 (java)
```java=
import java.text.DecimalFormat;
import java.util.*;
public class itsa34 {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
while(true)
{
String st=s.nextLine(),in[]=st.split(" ");
DecimalFormat f = new DecimalFormat("0.0");
float h=Float.parseFloat(in[0]);
int se=Integer.parseInt(in[1]);
if(se==1)System.out.println(f.format((h-80)*0.7));
else System.out.println(f.format((h-70)*0.6));
}
}
}
```
## 買獎品
```cpp=
#include<iostream>
using namespace std;
int main()
{
int tn=0;cin>>tn;
while(tn--)
{
int T=0,m=0,k=0;
cin>>T>>m>>k;
int ks[k];
for(int i=0;i<k;i++){ks[i]=0;cin>>ks[i];}
for(int i=0;i<k;i++)
{
for(int j=0;j<k;j++)
{
if(ks[i]<ks[j]){int t=0;t=ks[i];ks[i]=ks[j];ks[j]=t;}
}
}
k=0;
for(int i=0;i<m;i++){k+=ks[i];}
cout<<k<<endl;
k>T?cout<<"Impossible"<<endl:cout<<k<<endl;
}
return 0;
}
```
## 平、閏年判定
```cpp=
#include<iostream>
using namespace std;
int main()
{
int in=0;
while(cin>>in)
{
if(in%400==0)cout<<"Bissextile Year"<<endl;
else
{
if(in%100==0)cout<<"Common Year"<<endl;
else
{
in%4==0?cout<<"Bissextile Year"<<endl:cout<<"Common Year"<<endl;
}
}
}
return 0;
}
```
## 18啦遊戲設計
```cpp=
#include<iostream>
using namespace std;
int main()
{
int ds[6],in=0;
for(int i=0;i<6;i++){ds[i]=0;}
for(int j=0;j<4;j++){
cin>>in;
for(int i=0;i<6;i++){
if(i+1==in){ds[i]++;break;}}}
int d[3];in=2;
for(int i=0;i<3;i++){d[i]=0;}
for(int i=0;i<6;i++){
if(ds[i]>0){d[in]=(i+1)*10+ds[i];in--;}}
if(d[2]%10==4){cout<<"WIN"<<endl;return 0;}
if(d[2]%10==3){cout<<"R"<<endl;return 0;}
if(d[2]%10==2){
if(d[1]%10==2){cout<<d[1]/10*2<<endl;return 0;}
else {cout<<d[1]/10+d[0]/10<<endl;return 0;}}
if(d[2]%10==1){
if(d[1]%10==3){cout<<"R"<<endl;return 0;}
else if(d[1]%10==2){cout<<d[2]/10+d[0]/10<<endl;return 0;}
else {
if(d[0]%10==2){cout<<d[2]/10+d[1]/10<<endl;return 0;}
else {cout<<"R"<<endl;return 0;}}}
}
```
## 計算電費
```cpp=
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int t=0;cin>>t;
while(t--){
double in,nSu=0,Su=0;
cin>>in;
if(in>700) {Su+=(in-700)*5.63;nSu+=(in-700)*4.5;in=700;}
if(in>500) {Su+=(in-500)*4.97;nSu+=(in-500)*4.01;in=500;}
if(in>330) {Su+=(in-330)*4.39;nSu+=(in-330)*3.61;in=330;}
if(in>120) {Su+=(in-120)*3.02;nSu+=(in-120)*2.68;in=120;}
if(in>0){Su+=in*2.1;nSu+=in*2.1;}
cout<<fixed<<setprecision(2)<<"Summer months:"<<Su<<endl;
cout<<fixed<<setprecision(2)<<"Non-Summer months:"<<nSu<<endl;
}
return 0;
}
```
## 計算電費 (java)
```java=
import java.text.*;
import java.util.*;
public class itsa38 {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
DecimalFormat f = new DecimalFormat("0.00");
while(s.hasNext())
{double in=s.nextFloat(),nSu=0,Su=0;
if(in>700) {Su+=(in-700)*5.63;nSu+=(in-700)*4.5;in=700;}
if(in>500) {Su+=(in-500)*4.97;nSu+=(in-500)*4.01;in=500;}
if(in>330) {Su+=(in-330)*4.39;nSu+=(in-330)*3.61;in=330;}
if(in>120) {Su+=(in-120)*3.02;nSu+=(in-120)*2.68;in=120;}
if(in>0){Su+=in*2.1;nSu+=in*2.1;}
System.out.println("Summer months:"+f.format(Su));
System.out.println("Non-Summer months:"+f.format(nSu));
}}}
```
## 考試測驗 (java)
```java=
import java.util.*;
public class itsa39 {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int in=s.nextInt();
while(in--!=0)
{
int p[]=new int[4];p[3]=0;
for(int i=0;i<3;i++){p[i]=0;p[i]=s.nextInt();p[3]+=p[i];}
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++){if(p[i]<p[j]){int t=0;t=p[i];p[i]=p[j];p[j]=t;}}
}
if(p[0]>=60)System.out.println("P");
else if(p[3]>=220)System.out.println("P");
else if(p[3]<220&&p[1]>=60)System.out.println("M");
else if(p[3]<199&&p[2]>=80)System.out.println("M");
else System.out.println("F");
}
}
}
```
## ISBN驗證
```cpp=
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
string input;
int fir[10],twi[10],thr[10];
while(getline(cin,input))//讀入一行字串
{
istringstream cutString(input);//轉成可分割的型態
string output;//儲存被分割的字串
for(int i=0;i<10;i++)//10個字
{
getline(cutString,output,' ');//將切割的字串以空白為分割依次存入
if(output=="X"||output=="x") output="10";//若找到X則改成10
istringstream chanInt(output);//將一段字串轉換型態
chanInt >> fir[i];//一個個存入第一次陣列
}
for(int i=0;i<10;i++)//依照題目給的計算規則得到第二、三的陣列
{
i==0?twi[i]=fir[i]:twi[i]=twi[i-1]+fir[i];
i==0?thr[i]=twi[i]:thr[i]=thr[i-1]+twi[i];
}
thr[9]%11?cout<<"NO"<<endl:cout<<"YES"<<endl;//以最後求得的數進行判斷
}
system("pause");
return 0;
}
```