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;
}