团体程序设计天梯赛 L1-006~L1-010

L1-006

思路:

先求出该数的最小约数,然后从长度2开始利用尺取法枚举即可

代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
	ios::sync_with_stdio(false); cin.tie(nullptr);   //2147483647
	LL n; cin>>n;
	int ans=2; LL fac=2; deque<LL> qq;
	for(;fac*fac<=n;fac++) if(n%fac==0) break;
	if(fac*fac>n) fac=n;    //寻找最小能被整除的数 
	while(true){
		deque<LL> due; 
		LL pro=1; bool flag=false;
		for(LL i=2;i-2<ans;i++) due.push_back(i),pro*=i;
		for(LL i=ans+2;;i++){
			if(n%pro==0){qq=due,flag=true;break;}
			if(pro>n||pro<0) break;
			pro/=due.front(); due.pop_front(); due.push_back(i); pro*=i;
		}
		if(flag==false) break;
		ans++;
	}
	if(qq.size()){
		cout<<qq.size()<<'
';
		cout<<qq.front(); qq.pop_front();
		for(LL x:qq) cout<<'*'<<x;
	}else cout<<1<<'
'<<fac;
	return 0;
}

L1-007

思路:

按要求输出即可

代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
string s[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main(){
	ios::sync_with_stdio(false); cin.tie(nullptr);
	string ss; cin>>ss;
	vector<string> v;
	for(char c:ss){
		if(c=='-') v.push_back("fu");
		else v.push_back(s[c-'0']);
	}
	cout<<v[0]; for(int i=1;i<v.size();i++) cout<<' '<<v[i];
	return 0;
}

L1-008

思路:

学会用printf("%5d")

代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
int main(){
	ios::sync_with_stdio(false); cin.tie(nullptr);
	int a,b,ans=0; scanf("%d%d",&a,&b);
	for(int i=a;i<=b;i++){
		if((i-a)%5==0&&i!=a) putchar('
');
		printf("%5d",i); ans+=i;
	}
	putchar('
');
	printf("Sum = %d",ans);
	return 0;
}

L1-009

思路:

先利用最大公约数将这些分数通分;
然后分子相加,再按要求输出即可;
注意长整型开long long

代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL gcd(LL a,LL b){return b==0?a:gcd(b,a%b);}
LL lcm(LL a,LL b){return a/gcd(a,b)*b;} 
const int maxn=105;
int n;
LL a[maxn],b[maxn];
void solve(){
	LL x=0,y=1;
	for(int i=0;i<n;i++) y=lcm(y,b[i]);
	for(int i=0;i<n;i++) x+=y/b[i]*a[i];
	if(x<0) putchar('-'),x=-x;
	if(x>y){
		cout<<x/y; x=x%y;
		if(x){
			LL g=gcd(x,y); x/=g; y/=g;
			cout<<' '<<x<<'/'<<y;
		}	 
	}else if(x==y) cout<<1;
	else if(x==0) cout<<0;
	else{
		LL g=gcd(x,y); x/=g; y/=g;
		cout<<x<<'/'<<y;
	}
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i],getchar(),cin>>b[i];
	solve();
	return 0;
}

L1-010

思路:

排个序即可

代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
int a[3];
int main(){
	ios::sync_with_stdio(false); cin.tie(nullptr);
	for(int i=0;i<3;i++) cin>>a[i];
	sort(a,a+3);
	for(int i=0;i<3;i++){
		if(i) cout<<"->";
		cout<<a[i];
	}
	return 0;
}
原文地址:https://www.cnblogs.com/yuhan-blog/p/12308730.html