天梯赛制(PTA19.3.17训练)

今天下午首次在PTA平台体验天梯赛制,试题的解答提交后由评分系统即时评出得分,整场比赛得分为各题得分之和,可以反复提交,取最高分,提交错误不扣分。PS.真正天梯组队赛时参赛队员的个人排名由其个人获得的总分决定。在决定个人特等奖时,若出现总分并列,则按最高级别得分排名;若仍然并列,则按最高级别完整解决问题的个数进行排名;若仍然并列,则按系统记录的最后一次提交时间进行排名,快者为王。速度与激情的碰撞真的很刺激!

先挂个链接吧,供以后备用!–>

一、Hello World! (5 分)

在这里插入图片描述
签到题,本题不解释。

#include<stdio.h>
	int main()
	{
		printf("Hello World!");
	}

二、后天 (5 分)

在这里插入图片描述
签到题,本题不解释。

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
	int main()
	{
		int a;
		cin>>a;
		if(a>=1&&a<=5)cout<<a+2<<endl;
		else if(a==6)	cout<<"1"<<endl;
		else if(a==7)	cout<<"2"<<endl;
	}

三、计算阶乘和 (10 分)

在这里插入图片描述
签到题,本题不解释。

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int jc(int n)
{
	int s=1,sum=0;
	for(int i=1;i<=n;i++)
	{
		s*=i;
		sum+=s;
	}
	return sum;
}
	int main()
	{
		int n,s;
		cin>>n;
		cout<<jc(n)<<endl;
	}

四、念数字 (10 分)

在这里插入图片描述
本题只需注意行末没有空格,数字直接if判断输出,属于签到题。

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
	int main()
	{
		char a[1000];
		cin>>a;
		int len=strlen(a);
		for(int i=0;i<len;i++)
		{
			if(i!=len-1)
			{
			if(a[i]=='-')	cout<<"fu ";
				else if(a[i]=='0')	cout<<"ling ";
				else if(a[i]=='1')	cout<<"yi ";
				else if(a[i]=='2')	cout<<"er ";
				else if(a[i]=='3')	cout<<"san ";
				else if(a[i]=='4')	cout<<"si ";
				else if(a[i]=='5')	cout<<"wu ";
				else if(a[i]=='6')	cout<<"liu ";
				else if(a[i]=='7')	cout<<"qi ";
				else if(a[i]=='8')	cout<<"ba ";
				else if(a[i]=='9')	cout<<"jiu ";				
			}
			else
				if(a[i]=='-')	cout<<"fu ";
				else if(a[i]=='0')	cout<<"ling";
				else if(a[i]=='1')	cout<<"yi";
				else if(a[i]=='2')	cout<<"er";
				else if(a[i]=='3')	cout<<"san";
				else if(a[i]=='4')	cout<<"si";
				else if(a[i]=='5')	cout<<"wu";
				else if(a[i]=='6')	cout<<"liu";
				else if(a[i]=='7')	cout<<"qi";
				else if(a[i]=='8')	cout<<"ba";
				else if(a[i]=='9')	cout<<"jiu";			
		}
	}

五、一帮一 (15 分)

在这里插入图片描述
我们可以使用结构体保存学生信息,其中,不妨使用字符串来保存学生的姓名//未完待续

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main(){
	string s;
	int len,j=0,m=0;
	double i=1.0;
	cin>>s;
	if(s[0]=='-')
	i=i*1.5;
	len=s.size();
	if((s[len-1]-48)%2==0)
	  i=i*2;
	  for(j=0;j<len;j++){
	  	if(s[j]=='2'){
	  		m++;
		  }
	  }
	  if(s[0]=='-')
	   len--;
	double w=(double)((double)m/len)*i*100;
	printf("%.2lf%%\n",w);
	return 0;
} 

六、到底有多二 (15 分)

在这里插入图片描述
本题要求负值翻1.5倍,偶数翻两倍,直接按照题意模拟即可。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main(){
	string s;
	int len,j=0,m=0;
	double i=1.0;
	cin>>s;
	if(s[0]=='-')
	i=i*1.5;
	len=s.size();
	if((s[len])%2==0)
	  i=i*2;
	  for(j=0;j<len;j++){
	  	if(s[j]=='2'){
	  		m++;
		  }
	  }
	  if(s[0]=='-')
	   len--;
	double w=(double)((double)m/len)*i*100;
	printf("%.2lf%%\n",w);
	return 0;
} 

七、N个数求和 (20 分)

在这里插入图片描述
评论: 待完善

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int gcd(int x,int y)
{
    return y?gcd(y,x%y):x;
}
int main()
{
    int n,a1,b1,a2,b2,t,p;
    cin>>n;
    scanf("%d/%d",&a1,&b1);
    n--;
    while(n--)
    {
        scanf("%d/%d",&a2,&b2);
        a1=a1*b2+a2*b1;b1*=b2;
        if(a1<0) 
            a1*=-1,p=-1;
        else if(a1==0) 
        {
            b1=1;continue;
        }
        else p=1;
        t=gcd(a1,b1);
        a1=a1*p/t;b1/=t;
    }
    if(abs(a1)%b1==0) printf("%d\n",a1/b1);
    else if(abs(a1)/b1>=1) printf("%d %d/%d\n",a1/b1,abs(a1)-abs(a1/b1)*b1,b1);
    else printf("%d/%d\n",a1,b1);
}

八、出租 (20 分)

在这里插入图片描述
评价: 待完善

九、互评成绩 (25 分)

在这里插入图片描述
评价: 待完善
代码:

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
double pj[10010];
int a[12];

bool cmp(double a, double b){
    return a>b;
}
int main(){
    int n, k, m;
    cin>>n>>k>>m;
    for(int i=0;i<n;i++){
        for(int j=0;j<k;j++){
            cin>>a[j];
        }
        sort(a,a+k);
        double num=0;
        for(int j=1;j<k-1;j++){
            num+=a[j];
        }
        pj[i]=num/(k-2);
    }
    sort(pj,pj+n,cmp);
    int cnt=0;
    for(int i=m-1;i>=0;i--){
        printf(++cnt==1?"%.3f":" %.3f", pj[i]);
    }
    
    return 0;
}

十、树的遍历 (25 分)

在这里插入图片描述
评价: 待完善

十一、 家庭房产 (25 分)

在这里插入图片描述
评价: 待完善

十二、名人堂与代金券 (25 分)

在这里插入图片描述

代码:

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
	struct node{
		char zh[20];
		int score;
	}arr[10010];
	bool cmp(node a,node b){
		if(a.score==b.score) return strcmp(a.zh,b.zh)<0?1:0;
		return a.score>b.score;
	}
	int main(){
		int n,g,k,sum=0,rank,sc=101;
		scanf("%d%d%d", &n, &g, &k);
		for(int i=0;i<n;i++){
			int a;
			scanf("%s %d",arr[i].zh,&a);
			arr[i].score =a;
			if(a>=60){
				if(a<g) sum+=20;
				else sum+=50;
			}
		}
		sort(arr,arr+n,cmp);
		printf("%d\n",sum);
		for(int i=0;;i++){
			if(arr[i].score<sc){
				sc=arr[i].score;
				rank=i+1;
			}
			if(rank>k) break;
			printf("%d %s %d\n", rank, arr[i].zh, arr[i].score);
		}
		return 0;
	}

十三、喊山 (30 分)

在这里插入图片描述

十四、是否完全二叉搜索树 (30 分)

在这里插入图片描述

十五、非常弹的球 (30 分)

在这里插入图片描述

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值