文章目录
一. 洛谷P8869 [传智杯 #5 初赛] A-莲子的软件工程学
1.题目内容
2.题意分析
定义一个fun函数实现条件判断的功能,并注意对于全部数据,保证a,b在32 位有符号整型范围内,所以要开long long int
3.完整代码
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int funl(long long int a,long long int b)
{
if(b>0) return 1;
else if(b<0) return -1;
}
int main()
{
long long int a,b;
scanf("%lld%lld",&a,&b);
long long int c=funl(a,b);
printf("%lld",c*abs(a));
return 0;
}
二.P8870 [传智杯 #5 初赛] B-莲子的机械动力学
1.题目内容
2.题意分析
直接看题目描述,不难发现这是一个考察进位的问题,末位从2开始依次累加,这里我们要注意每次数据进位是减去大于对应位的值,而不是除去。然后我们在输入数据是定义的数组应尽量逆序赋值,正序输出,这是防止进位时边界出错。
3.完整代码
#include<stdio.h>
#include<math.h>
const int N = 2E+6;
int n, m, a[N], b[N], c[N + N];
int main() {
scanf("%d%d", &n, &m);
for (int i = n; i >= 1; i--) scanf("%d", &a[i]);
for (int j = m; j >= 1; j--) scanf("%d", &b[j]);
int mix = n > m ? n : m;
for (int i = 1; i <= mix; i++) {
c[i] += a[i] + b[i];
if (c[i] >= i + 1) {
c[i] -= (i + 1);
c[i + 1]++;
}
}
mix++;//进位扩一位
while (c[mix] == 0 && mix > 0) mix--;//处理前缀0的情况
if (mix <= 0) mix = 1;//最小情况为1
for (int i = mix; i >= 1; i--)
printf("%d ", c[i]);
return 0;
}
三.P8871 [传智杯 #5 初赛] C-莲子的排版设计学
1.题目内容
2.题意分析
输入输出发现1的左右两端各一个空格,到了两位数考察补位情况,仅右边一个空格,所以我们定义一个函数关于判断一个数是几位数。然后用getline可读取空格实现,一般输入cin到空格就结束
3.完整代码
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=2e4+10;
string txt[maxn];
int fun(int n)
{
int w=1;
while(n)
{
n=n/10;
++w;
}
return w;
}
int main()
{
string a;
int m=0;
while(getline(cin,a))
{
++m;
txt[m]=a;
}
int pos=fun(m);
for(int i=1;i<=m;i++)
{
int l=fun(i);
for(int j=1;j<=pos-l;j++)
{
cout<<" ";
}
cout<<i<<" ";
cout<<txt[i]<<endl;
}
return 0;
}