python|水题(葡萄城题目)

(太闲了一天天的,只会c/c++和python所以选了2,5题)
题目出处:http://www.grapecity.com.cn/career/challenge
题目2:数据可视化 编程语言:不限
题目描述:

有句话是这么说的:“文不如表,表不如图”。形象地描述了图表在传达信息时,给接收者带来的截然不同的效率和体验。因此,在计算机计算能力、数据规模和决策需求都不断提升的当下,数据可视化的应用也越来越普遍。
数据可视化的范围很广,涉及到数据的获取、加工、建模、图形学,人机交互等很多概念和领域,想更快上手,获得更好的体验,使用DragonFly
BI这样的专业工具和服务是更明智的选择。
今天,我们通过一个简化的命题,来亲手实现简单的数据可视化。编写一个程序,对于给定的一组数据和要求,输出一个以字符组成的柱状图。
输入
第一行,一个整数 N(1<=n<=20),表示这组数据的条目数。
第二行,两个字符串,用于表示数据展示在柱状图上的排序方式。第一个字符串是“Name” 或者
“Value”,表示排序的依据是数据条目的名称亦或数值;第二个字符串是 “ASC” 或者 “DESC”,表示升序或降序。 随后的 N
行,每行包含一个字符串 S 和一个数字 V,以空格分隔,表示一条数据。S 即数据条目的名称,仅包含小写字母,V
即对应的数值,是一个整数,(0<=V<=1,000,000)
输入示例
3
Value DESC
apple 5
pen 3
pineapple 10
输出示例
python|水题(葡萄城题目)
文章图片

题解
  1. 接受输入
  2. 关联排序
  3. 格式输出(找出最长的字符 和对应最大的value就好了,逐行print就好了)
  4. Don’t BB ,Please Code
【python|水题(葡萄城题目)】python代码
#python 3.65,win10 Big——one #接受输入并初始化 def inputData(): try: dataLen = int(input()) gist, way = input().split(' ') data = https://www.it610.com/article/[] maxLenWrod = 0 maxValue = 0 for _ in range(dataLen): name, value = input().split(' ') temp1 = len(name) temp2 = int(value)data.append((name, temp2)) if maxLenWrod < temp1: maxLenWrod = temp1 if maxValue < temp2: maxValue = https://www.it610.com/article/temp2 return data, gist, way, dataLen, maxValue, maxLenWrod except: print("Error!输入错误") #按要求排序 def mySort(data,gist,way): resv=False if way == "ASC": resv = False #升序 elif way == "DESC": resv = True#降序 else: print("Warning!排序方式输入错误,请输入ASC:升序,DESC:降序(默认采用升序)") #采用lambda表达式选择排序对象,调用内置列表的排序方法 if gist == "Value": data.sort(key=lambda x: x[1], reverse=resv) elif gist == "Name": data.sort(key=lambda x: x[0], reverse=resv) else: print("Warning!排序对象输入错误,请输入Name:按名称排序,Value:按值排序(默认采用按值排序)") data.sort(key=lambda x: x[1], reverse=resv) #画表 def createTable(data,dataLen,maxValue,maxLenWrod): #由于黑方块在python输出中占两个字符位置因此,需要进行*2 upside = "\u250c" + "\u2500" * (maxLenWrod+1) + \ "\u252c" + "\u2500" * (2*maxValue + 1) + "\u2510" #表格上边 downSide = "\u2514" + "\u2500" * (maxLenWrod+1) + "\u2534" \ + "\u2500" * (2*maxValue + 1) + "\u2518"#表格下边 septalSide = "\u251c" + "\u2500" * (maxLenWrod+1) + "\u253c" \ + "\u2500" * (2*maxValue + 1) + "\u2524"#表格间隔 print(upside) for i in range(dataLen-1): name = data[i][0] value = https://www.it610.com/article/data[i][1] #每一行数据(为了保持美观在字符前加一个空格保持对称) temp ="\u2502" + "\u0020" +"\u0020" * (maxLenWrod - len(name))+name + "\u2502" + "\u0020" + \ "\u2588" * value + "\u0020" * (2*maxValue - value * 2) + "\u2502" print(temp) print(septalSide) #最后一组数据显示 name = data[-1][0] value = https://www.it610.com/article/data[-1][1] temp ="\u2502" +"\u0020" +"\u0020" * (maxLenWrod - len(name))+name + "\u2502" + "\u0020" + \ "\u2588" * value + "\u0020" * (2*maxValue - value * 2) + "\u2502" print(temp) print(downSide) pass #主函数调用 def main(): data, gist, way, dataLen, maxValue, maxLenWrod = inputData() mySort(data, gist, way) #print(data) createTable(data, dataLen, maxValue, maxLenWrod)if __name__ == "__main__": main() input()#保持cmd窗口不关闭

结果示例
python|水题(葡萄城题目)
文章图片

C++版
装逼演全套 c++也得整上
/* author :Big——one c++11, Ubuntu16 */ //#include #include #includeusing namespace std; /*定义排序规则*/ //根据value的值升序排序 bool cmp1(pair,int>a,pair,int>b) { return a.second < b.second; }//根据value的值降序排序 bool cmp2(pair,int>a,pair,int>b) { return a.second > b.second; } //根据name的值升序序排序(a到z) bool cmp3(pair,int>a,pair,int>b) { return a.first < b.first; } //根据name的值降序排序(按z到a) bool cmp4(pair,int>a,pair,int>b) { return a.first > b.first; }/*定义制表*/ //上边 void upSide(int x,int y) { cout<<"\u250c"; for(int i=0; i&data,int maxLenS,int maxV) { int temp=0; cout<<"\u2502"; //S字符 temp = maxLenS-data.first.length(); for(int j=0; j*data,int maxLenS,int maxV,int N) { maxV +=1; upSide(maxLenS,maxV); int temp=0; for(int i=0; i>N; if(N>20||N<1) { cout<<"input number 1<=N<=20"<>gist>>way; if((gist!="Value"&&gist!="Name")||(way!="ASC"&&way!="DESC")) { cout<<"input the first char should be \"Value\" or \"Name\" "<pr[20]; int maxLenS = 0, maxV = 0; for(int i=0; i>pr[i].first>>pr[i].second; if(maxLenS

python|水题(葡萄城题目)
文章图片

题目5:杨辉三角 大水题,没啥说的,通项式:f(x,y)=f(x-1,y-1)+f(x-1,y)
Don’t BB ,Please Code
//dev-c++ 5.11 #include int func(int x,int y) { if((y==1)||(y==x))return 1; //边缘为1 return func(x-1,y-1)+func(x-1,y); //递归 f(x,y) = f(x-1,y-1)+f(x-1,y) } int main() { int x,y; scanf("%d%d",&x,&y); printf("%d\n",func(x,y)); return 0; }

    推荐阅读