2020牛客暑期多校训练营(第五场)

F DPS

题目大意:

给你n个数字记作\(d_{1},d_{2},d_{3}...\),按照公式\(s_{i}=\left [ 50\frac{d_{i}}{max \ d_{i}} \right ]\)向上取整输出" "和"-"。
如果\(max \ d_{i} = d_{i}\):

+------------+
|           *|di
+------------+ 其中-的个数等于50*ai/maxn向上取整,空格个数是-号个数少一个,再输出*

如果\(max \ d_{i} != d_{i}\):

+--------+
|        |di
+--------+ 其中空格和-的个数等于50*ai/maxn向上取整

题目分析:

直接进行模拟,注意细节。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=5000+5;
//long long n,m,t,k,counts=0,flag=0;
int maxd,d[105];

inline int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    maxd = 0;
    for (int i=0;i<n;i++){
    	cin>>d[i];
    	maxd=max(d[i],maxd);
	}
	for (int i=0;i<n;i++){
		int s=ceil(1.0*d[i]*50/maxd);
		if (d[i]==maxd) s--;//如果相等,先减1,确定空格的数量。反之s值不变化。 
		
		cout<<"+";
		for (int i=0;i<s;i++) cout<<"-";
		if(d[i]==maxd) cout<<"-";//因为前面减1,所以这里补上一个。 
		cout<<"+"<<endl;
		
		cout<<"|";
		for (int i=0;i<s;i++) cout<<" ";
		if (d[i]==maxd) cout<<"*";
		cout<< "|"<<d[i]<<endl;
		
		cout<<"+";
		for (int i=0;i<s;i++) cout<<"-";
		if (d[i]==maxd) cout<<"-";//同理。 
		cout<<"+"<<endl;	
	}    
    return 0;
}
posted @ 2020-09-05 11:04  Treasure_lee  阅读(114)  评论(0)    收藏  举报