題目要求:
給定一系列2維平面點的座標(x, y),其中x和y均爲整數,要求用一個最小的長方形框將所有點框在內。長方形框的邊分別平行於x和y座標軸,點落在邊上也算是被框在內。
具體的輸入輸出格式規定如下:
輸入格式:測試輸入包含若干測試用例,每個測試用例由一系列座標組成,每對座標佔一行,其中|x|和|y|小於 231;一對0 座標標誌着一個測試用例的結束。注意(0, 0)不作爲任何一個測試用例裏面的點。一個沒有點的測試用例標誌着整個輸入的結束。
輸出格式:對每個測試用例,在1行內輸出2對整數,其間用一個空格隔開。第1對整數是長方形框左下角的座標,第2對整數是長方形框右上角的座標。
輸入樣例:
12 56
23 56
13 10
0 0
12 34
0 0
0 0
輸出樣例:
12 10 23 56
12 34 12 34
#include <iostream>
using namespace std;
bool Input()
![]()
...{
int x,y;
int minx,miny,maxx,maxy;
cin>>x>>y;
if(!x&&!y) return false;
minx=maxx=x;
miny=maxy=y;
while(1)
![]()
...{
cin>>x>>y;
if(!x&&!y) break;
if(x<minx) minx=x;
if(x>maxx) maxx=x;
if(y<miny) miny=y;
if(y>maxy) maxy=y;
}
cout<<minx<<" "<<miny<<" "<<maxx<<" "<<maxy<<endl;
return true;
}
int main()
![]()
...{
while(Input());
return 0;
}
![]()
題目要求:
統計一個給定字符串中指定的字符出現的次數
具體的輸入輸出格式規定如下:
輸入格式:測試輸入包含若干測試用例,每個測試用例包含2行,第1行爲一個長度不超過5的字符串,第2行爲一個長度不超過80的字符串。注意這裏的字符串包含空格,即空格也可能是要求被統計的字符之一。當讀到'#'時輸入結束,相應的結果不要輸出。
輸出格式:對每個測試用例,統計第1行中字符串的每個字符在第2行字符串中出現的次數,按如下格式輸出:
c0 n0
c1 n1
c2 n2
...
其中ci是第1行中第i個字符,ni是ci出現的次數。
輸入樣例:
I
THIS IS A TEST
i ng
this is a long test string
#
輸出樣例:
I 2
i 3
5
n 2
g 2
題目要求:
現有公園遊船租賃處請你編寫一個租船管理系統。當遊客租船時,管理員輸入船號並按下S鍵,系統開始計時;當遊客還船時,管理員輸入船號並按下E鍵,系統結束計時。船號爲不超過100的正整數。當管理員將0作爲船號輸入時,表示一天租船工作結束,系統應輸出當天的遊客租船次數和
平均租船時間。
注意:由於線路偶爾會有故障,可能出現不完整的紀錄,即只有租船沒有還船,或者只有還船沒有租船的紀錄,系統應能自動忽略這種無效紀錄。
具體的輸入輸出格式規定如下:
輸入格式:測試輸入包含若干測試用例,每個測試用例爲一整天的租船紀錄,格式爲
船號(1~100) 鍵值(S或E) 發生時間(小時:分鐘)
每一天的紀錄保證按時間遞增的順序給出。當讀到船號爲-1時,全部輸入結束,相應的結果不要輸出。
輸出格式:對每個測試用例輸出1行,即當天的遊客租船次數和平均租船時間(以分鐘爲單位的精確到個位的整數時間)。
輸入樣例:
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00
-1
輸出樣例:
2 196
0 0
1 60
#include <iostream>
#include <string>
#include <cstring>
#include <vector>
using namespace std;
int flag[128];
int start[128];
vector <int> vec;
int strToint(string str)
![]()
...{
int hour;
int minute;
hour=(str[0]-'0')*10+str[1]-'0';
minute=(str[3]-'0')*10+str[4]-'0';
return hour*60+minute;
}
bool Input()
![]()
...{
int num;
char key;
string time;
cin>>num;
if(num==-1)return false;
cin>>key>>time;
memset(flag,0,sizeof(flag));
vec.clear();
if(!num) return true;
if(key=='S')
![]()
...{
flag[num]=1;
start[num]=strToint(time);
}
while(cin>>num>>key>>time)
![]()
...{
if(!num) break;
if(key=='S')
![]()
...{
flag[num]=1;
start[num]=strToint(time);
}else if(key=='E')
![]()
...{
if(flag[num]==1)
![]()
...{
flag[num]=0;
vec.push_back(strToint(time)-start[num]);
}
}
}
return true;
}
void Solve()
![]()
...{
int sum=0;
int len=vec.size();
int i;
for(i=0;i<len;i++)
sum+=vec[i];
if(len)
cout<<len<<" "<<(sum+len-1)/len<<endl;
else
cout<<0<<" "<<0<<endl;
}
int main()
![]()
...{
while(Input())
Solve();
return 0;
}
![]()
題目要求:
Excel可以對一組紀錄按任意指定列排序。現請你編寫程序實現類似功能。
具體的輸入輸出格式規定如下:
輸入格式:測試輸入包含若干測試用例。每個測試用例的第1行包含兩個整數 N (<=100000) 和 C,其中 N 是紀錄的條數,C 是指定排序的列號。以下有 N
行,每行包含一條學生紀錄。每條學生紀錄由學號(6位數字,同組測試中沒有重複的學號)、姓名(不超過8位且不包含空格的字符串)、成績(閉區間[0, 100]內的整數)組成,每個項目間用1個空格隔開。當讀到 N=0 時,全部輸入結束,相應的結果不要輸出。
輸出格式:對每個測試用例,首先輸出1行“Case i:”,其中 i 是測試用例的編號(從1開始)。隨後在 N 行中輸出按要求排序後的結果,即:當 C=1 時,按學號遞增排序;當 C=2時,按姓名的非遞減字典序排序;當 C=3
時,按成績的非遞減排序。當若干學生具有相同姓名或者相同成績時,則按他們的學號遞增排序。
輸入樣例:
3 1
000007 James 85
000010 Amy 90
000001 Zoe 60
4 2
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 98
4 3
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 90
0 0
輸出樣例:
Case 1:
000001 Zoe 60
000007 James 85
000010 Amy 90
Case 2:
000010 Amy 90
000002 James 98
000007 James 85
000001 Zoe 60
Case 3:
000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int flag;
class student
![]()
...{
public:
char ID[8];
char name[16];
int grade;
bool operator<(student &B)
![]()
...{
if(flag==1)
return strcmp(ID,B.ID)<0?true:false;
else if(flag==2)
return strcmp(name,B.name)<0?true:false;
else
![]()
...{
if(grade!=B.grade)
return grade<B.grade;
else return strcmp(ID,B.ID)<0?true:false;
}
}
};
student stu[100005];
bool Input()
![]()
...{
int n;
cin>>n>>flag;
if(!n&&!flag) return false;
int i;
for(i=0;i<n;i++)
![]()
...{
cin>>stu[i].ID>>stu[i].name>>stu[i].grade;
}
sort(stu,stu+n);
cout<<"Case "<<flag<<":"<<endl;
for(i=0;i<n;i++)
cout<<stu[i].ID<<" "<<stu[i].name<<" "<<stu[i].grade<<endl;
return true;
}
int main()
![]()
...{
while(Input());
return 0;
}
![]()
題目要求:
省政府“暢通工程”的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可)。經過調查評估,得到的統計表中列出了有可能建設公路的若干條道路的成本。現請你編寫程序,計算出全省暢通需要的最低成本。
具體的輸入輸出格式規定如下:
輸入格式:測試輸入包含若干測試用例。每個測試用例的第1行給出評估的道路條數 N、村莊數目M ( < 100 );隨後的 N
行對應村莊間道路的成本,每行給出一對正整數,分別是兩個村莊的編號,以及此兩村莊間道路的成本(也是正整數)。爲簡單起見,村莊從1到M編號。當N爲0時,全部輸入結束,相應的結果不要輸出。
輸出格式:對每個測試用例,在1行裏輸出全省暢通需要的最低成本。若統計數據不足以保證暢通,則輸出“?”。
輸入樣例:
3 3
1 2 1
1 3 2
2 3 4
1 3
2 3 2
0 100
輸出樣例:
3
?
#include <iostream>
#include <cstring>
using namespace std;
int matrix[128][128];
int flag[128];
int nearest[128];
int n,m,p;
void Init()
![]()
...{
memset(flag,0,sizeof(flag));
memset(nearest,0,sizeof(nearest));
int i,j;
for(i=0;i<=m;i++)
for(j=0;j<=m;j++)
matrix[i][j]=1000000000;
}
bool Input()
![]()
...{
cin>>n>>m;
if(!n) return false;
int i;
int head,rear,v,min=1000000009;
Init();
for(i=0;i<n;i++)
![]()
...{
cin>>head>>rear>>v;
![]()
if(v<min) ...{min=v;p=head;}
matrix[head][rear]=matrix[rear][head]=v;
}
}
int findmin()
![]()
...{
int i,min=1000000010,k;
for(i=1;i<=m;i++)
if(!flag[i])
![]()
...{
if(nearest[i]<min)
![]()
...{
min=nearest[i];k=i;
}
}
return k;
}
void Solve()
![]()
...{
flag[p]=1;
int i,j;
int sum=0;
for(i=1;i<=m;i++)
nearest[i]=matrix[p][i];
for(i=2;i<=m;i++)
![]()
...{
p=findmin();
flag[p]=1;
sum+=nearest[p];
for(j=1;j<=m;j++)
if(matrix[p][j]<nearest[j])
nearest[j]=matrix[p][j];
}
if(sum>1000000000)
cout<<"?"<<endl;
else
cout<<sum<<endl;
}
int main()
![]()
...{
while(Input())
Solve();
return 0;
}
![]()
題目要求:
現有一筆經費可以報銷一定額度的發票。允許報銷的發票類型包括買圖書(A類)、文具(B類)、差旅(C類),要求每張發票的總額不得超過1000元,每張發票上,單項物品的價值不得超過600元。現請你編寫程序,在給出的一堆發票中找出可以報銷的、不超過給定額度的最大報銷額。
具體的輸入輸出格式規定如下:
輸入格式:測試輸入包含若干測試用例。每個測試用例的第1行包含兩個正數 Q 和 N,其中 Q 是給定的報銷額度,N(<=30)是發票張數。隨後是 N 行輸入,每行的格式爲:
m Type_1:price_1 Type_2:price_2 ... Type_m:price_m
其中正整數 m 是這張發票上所開物品的件數,Type_i 和 price_i 是第 i 項物品的種類和價值。物品種類用一個大寫英文字母表示。當N爲0時,全部輸入結束,相應的結果不要輸出。
輸出格式:對每個測試用例輸出1行,即可以報銷的最大數額,精確到小數點後2位。
輸入樣例:
200.00 3
2 A:23.50 B:100.00
1 C:650.00
3 A:59.99 A:120.00 X:10.00
1200.00 2
2 B:600.00 A:400.00
1 C:200.50
1200.50 3
2 B:600.00 A:400.00
1 C:200.50
1 A:100.00
100.00 0
輸出樣例:
123.50
1000.00
1200.50
#include <iostream>
#include <vector>
using namespace std;
vector <double> vec;
double top;
bool Input()
![]()
...{
int num;
cin>>top>>num;
if(!num) return false;
vec.clear();
vec.push_back(0);
int i,k,j;
double sum,mon;
char ch1,ch2;
for(i=0;i<num;i++)
![]()
...{
sum=0;
cin>>k;
for(j=0;j<k;j++)
![]()
...{
cin>>ch1>>ch2;
cin>>mon;
if(mon>600||(ch1!='A'&&ch1!='B'&&ch1!='C')) mon=1001;
sum+=mon;
}
if(sum<=1000)
vec.push_back(sum);
}
return true;
}
double f(int n,double v)
![]()
...{
if(n==0)return 0;
if(v<0.000001)return 0;
if(v>=vec[n])
return max(f(n-1,v),f(n-1,v-vec[n])+vec[n]);
else return f(n-1,v);
}
double max(double a,double b)
![]()
...{
return a>b?a:b;
}
void Solve()
![]()
...{
int i;
int n=vec.size()-1;
double v=top;
cout.precision(2);cout.setf(ios::fixed);
if(v>=vec[n])
cout<<max(f(n-1,v),f(n-1,v-vec[n])+vec[n])<<endl;
else cout<<f(n-1,v)<<endl;
}
int main()
![]()
...{
while(Input())
Solve();
return 0;
}
![]()
今天又找到了些題目一起貼上來
#include <iostream>
#include <string>
using namespace std;
int main()
![]()
...{
int i,j,cnt;
string str,full;
while(getline(cin,str))
![]()
...{
if(str=="#") break;
getline(cin,full);
cnt=0;
for(i=0;i<str.length();i++)
![]()
...{
cnt=0;
for(j=0;j<full.length();j++)
if(str[i]==full[j]) cnt++;
cout<<str[i]<<" "<<cnt<<endl;
}
}
return 0;
}
![]()