天津大学901考研程序设计题练习题(四、五、六)
1、练习题四
1.1 最小数
#include<string>
#include<algorithm>
using namespace std;
bool cmp(string A,string B){
return A+B<B+A;
}
const int MAXN = 1e4+4;
string num[MAXN];
int main(){
int n;
cin>>n;
for(int i=0;i<n;++i){
cin>>num[i];
}
sort(num,num+n,cmp);
for(int i=0;i<n;++i)cout<<num[i];
return 0;
}
2、练习题五
2.1 求并集
#include<iostream>
#include<set>
using namespace std;
int main(){
int n,m,d;
while(cin>>n>>m){
set<int> s;
for(int i=0;i<n+m;++i){
cin>>d;
s.insert(d);
}
for(set<int>::iterator iter=s.begin();iter!=s.end();++iter){
cout<<*iter<<" ";
}
cout<<endl;
}
}
2.2 寻找素数对
#include<iostream>
using namespace std;
const int MAXN = 1e4+4;
bool number[MAXN];
void EratosthenesPrime(){
for(int i=2;i*i<MAXN;++i){
if(!number[i]){
for(int j=i*i;j<MAXN;j+=i)number[j]=true;
}
}
}
int main(){
int n;
EratosthenesPrime();
while(cin>>n){
for(int j=n/2-1;j>1;--j){
if (!number[j]&&!number[n-j]){
cout<<j<<" "<<n-j<<endl;
break;
}
}
}
return 0;
}
3、练习题六
3.1 亲和数
#include<iostream>
using namespace std;
int factorSum(int n){
int sum = 1,j;
for(j=2;j*j<=n;++j){
if(n%j==0)sum += j+n/j;
}
if(j*j==n) sum-=j;
return sum;
}
int main(){
int m,a,b;
cin>>m;
while(m--){
cin>>a>>b;
if (factorSum(a)==b&&factorSum(b)==a)cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}
3.2 第几天
#include<cstdio>
using namespace std;
bool isLeap(int n){
return (n%400==0)||(n%100!=0&&n%4==0);
}
int a[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int year,month,day;
while(~scanf("%d/%d/%d",&year,&month,&day)){
int sum = day;
for(int i=1;i<month;++i)sum+=a[i];
if (isLeap(year)&&month>2)sum++;
printf("%d\n",sum);
}
return 0;
}