前言:
1.这是L1的6~10,5题合一篇,为了节省空间,就不放题目图片了
2.题目和图片都来源于拼题A:https://pintia.cn,侵删
3.预计L1部分解释会比较少,之后写L2、L3的解释的话会详细一点
L1-006 连续因子 (20 分)
Notice:
题意稍微有点绕
相当于是在给定数的 所有因子里 找出最长的 连续数字串,如果有多个连续数字串的长度 都是最大的,输出数字较小的那一组
解题的话也就是给定数是素数的话直接输出,不是素数的话就暴力查找
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//素数判断
bool prim(ll x)
{
for(int i = 2; i <= sqrt(x); i++)
{
if(x % i == 0) return false;
}
return true;
}
int main(void)
{
ll n;
cin >>n;
//是素数输出1和其本身
if(prim(n)){
cout <<1 <<endl;
cout <<n;
return 0;
}
//不是素数暴力查找
ll sum, maxl = -1, startl;
for(ll i = 2; i <= sqrt(n); i++){
sum = 1;
for(int j = i; j*sum <= n; j++){
sum *= j;
//找到连续因子串并更新最大长度和起始数字
if(n%sum==0 && j-i+1 > maxl){
maxl = j-i+1;
startl = i;
}
}
}
cout <<maxl <<endl;
for(int i = startl; i < startl + maxl; i++){
cout <<i;
if(i < startl + maxl - 1) cout <<"*";
}
return 0;
}
L1-007 念数字 (10 分)
Notice:
map映射,且输出结果不能多空格
#include <bits/stdc++.h>
using namespace std;
map<int, string>mp;
int main(void)
{
string s;
cin >>s;
mp[0] ="ling"; mp[1] = "yi";
mp[2] = "er"; mp[3] = "san";
mp[4] = "si"; mp[5] = "wu";
mp[6] = "liu"; mp[7] = "qi";
mp[8] = "ba"; mp[9] = "jiu";
for(int i = 0; s[i]; i++){
if(s[i] == '-') cout <<"fu" <<" ";
else{
cout <<mp[s[i] - '0'];
if(s[i+1]) cout <<" ";
}
}
return 0;
}
L1-008 求整数段和 (10 分)
#include <bits/stdc++.h>
using namespace std;
int st, en;
int main(void)
{
int cnt = 0, sum = 0;
cin >>st >>en;
for(int i = st; i <= en; i++){
sum += i; cnt++;
printf("%5d", i);
if(cnt % 5 == 0 || i == en) cout <<endl;
}
cout <<"Sum = " <<sum;
return 0;
}
L1-009 N个数求和 (20 分)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll gcd(ll a, ll b)
{ return b == 0 ? a : gcd(b, a % b); }
int main(void)
{
ll n, zi, mu;
cin >>n;
for(int i = 1;i <= n; i++){
ll z, m; char x;
cin >>z >>x >>m;
if(i != 1){
//最小公倍数通分
ll temp = mu * m / gcd(m , mu);
//修改分子加和
z = z * (temp / m);
zi = zi * (temp / mu);
zi += z;
//分母
m = mu = temp;
}
else
zi = z, mu = m;
}
//分子分母化简
while(gcd(zi, mu) != 1){
ll num = gcd(zi, mu);
zi /= num; mu /= num;
}
//输出
if(zi % mu == 0)
cout <<zi/mu;
else{
if(zi > mu){
cout <<zi/mu <<" ";
zi %= mu;
cout <<zi <<"/" <<mu;
}
else
cout <<zi <<"/" <<mu;
}
return 0;
}
L1-010 比较大小 (10 分)
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
int a[3];
cin >>a[0] >>a[1] >>a[2];
sort(a, a + 3);
cout <<a[0] <<"->"<<a[1] <<"->" <<a[2];
}