Java教程

PTA编程题(11~15)

本文主要是介绍PTA编程题(11~15),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

PTA编程题(11~15)

文章目录

  • PTA编程题(11~15)
    • 1011 A+B 和 C (15 分)
      • 题意
      • 思路
      • 坑点
      • 代码
      • 总结
    • 1012 数字分类 (20 分)
      • 题意
      • 思路
      • 坑点
      • 代码
      • 总结
    • 1013 数素数 (20 分)
      • 题意
      • 思路
      • 坑点
      • 代码
      • 总结
    • 1014 福尔摩斯的约会 (20 分)
      • 题意
      • 思路
      • 坑点
      • 代码
      • 总结
    • 1015 德才论 (25 分)
      • 题意
      • 思路
      • 坑点
      • 代码
      • 总结

1011 A+B 和 C (15 分)

题目链接

题意

输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。
对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。

思路

  • 1.请判断 A+B 是否大于 C。

坑点

  • 1.无。

代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=10+5;
int num[N]; 
//int ans[N];
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		double a,b,c;
		cin>>a>>b>>c;
		if((a+b)>c)
		{
			num[i]=1;
		} 
		if((a+b)<=c)
		{
			num[i]=0;
		}
	}
	//cout<<"Case #";
	for(int i=1;i<=n;i++)
	{
		if(num[i]==0)
		{
			cout<<"Case #"<<i<<": false"<<endl;
		}
		else
		{
			cout<<"Case #"<<i<<": true"<<endl;
		}
	}
	return 0;
} 

总结

签到题。

1012 数字分类 (20 分)

题目链接

题意

每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。
对给定的 N 个正整数按题目要求输出。数字间以空格分隔,但行末不得有多余空格。

思路

  • 1.按照题目要求进行判断就行了

坑点

  • 1.注意输出格式。

代码

#include <iostream>
using namespace std;

int main(){
	int sum1 = 0,sum2 = 0,sum4 = 0;//sum和cnt的下角标和A的下标相对应
	int cnt2 = 0,cnt3 = 0,cnt4 = 0,cnt5 = 0;
	int n;
	cin >> n;
	int k = -1;//用于交错求和
	int num;
	int maxn = 0;
	while(n--){
		cin >> num;
		if(num%5==0&&num%2==0){
			sum1 += num;
		}else if(num%5==1){
			k *= -1;//交错求和
            cnt2++;
			sum2 += k*num;
		}else if(num%5==2){
			cnt3++;
		}else if(num%5==3){
			cnt4++;
			sum4 += num;
		}else if(num%5==4){
			if(num>maxn)
				maxn = num;
		}
	}
	if(sum1!=0)
	{
		printf("%d",sum1);
	}
	else
	{
		printf("N");
	}	
	if(cnt2!=0)//注意这里,不能写sum2
	{
		printf(" %d",sum2);
	}	
	else
	{
		printf(" N");
	}
	if(cnt3!=0)
	{
		printf(" %d",cnt3);
	}
	else
	{
		printf(" N");
	}
	if(cnt4!=0)
	{
		printf(" %.1lf",sum4*1.0/cnt4);
	}
	else
	{
		printf(" N");
	}
	if(maxn!=0)
	{
		printf(" %d",maxn);
	}
	else
	{
		printf(" N");
	}
		
	return 0;
}

总结

签到题

1013 数素数 (20 分)

题目链接

题意

输入在一行中给出 M 和 N,其间以空格分隔。
输出所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。

思路

  • 1.现任给两个正整数 M≤N≤10的4次方,

坑点

  • 1.注意素数的判断

代码

#include<stdio.h>
#include<math.h>
//判断素数
int xu(int x)
{
    int flag = 1;
    for(int i=2;i<=sqrt(x);i++)
    {
        if(x%i == 0)
        {
            flag=0;
        }
    }
    return flag;
}
 
int main()
{
    int m,n;
    scanf("%d %d", &m, &n); 
    int num[10000];
    num[0]=2;
    int j=1;
    for(int i=3;j<10000;i++)  
    {
        if(xu(i))
        {
            num[j] = i;
            j++;
        }
    }
    int k=1;
    for(int i=m;i<=n;i++)
    {
      if(k%10 != 0 && i!=n)
      {
        printf("%d ", num[i-1]);  
      }
        else if(k==n)
        {
            printf("%d", num[i-1]); 
        }
        else
        {
            printf("%d\n", num[i-1]); 
        }
        k = k+1;
    }
}

总结

素数的判断,签到题。

1014 福尔摩斯的约会 (20 分)

题目链接

题意

输入在 4 行中分别给出 4 个非空、不包含空格、且长度不超过 60 的字符串。
在一行中输出约会的时间,格式为 DAY HH:MM,其中 DAY 是某星期的 3 字符缩写,即 MON 表示星期一,TUE 表示星期二,WED 表示星期三,THU 表示星期四,FRI 表示星期五,SAT 表示星期六,SUN 表示星期日。题目输入保证每个测试存在唯一解。

思路

  • 1.字符相等,而且字符必须是大写字母,且必须在’A’ ~ ‘G’ 之间。(星期几)
  • 2.字符相等,而且字符必须在’A’ ~ ‘N’ 或 ‘0’ ~ '9’之间 (小时)
  • 3.字符相等, 而且必须是字母。(分钟)

坑点

  • 1.输出格式的注意。

代码

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

int main()
{
	int i,flag=0;
	char s[7][4]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
	char s1[60],s2[60],s3[60],s4[60];
	scanf("%s",s1);
	scanf("%s",s2);
	scanf("%s",s3);
	scanf("%s",s4);
	for(i=0;(s1[i]!='\0')&&(s2[i]!='\0');i++)
	{	
		if(s1[i]==s2[i]){
			if(flag==0&&s1[i]>='A'&&s1[i]<='G')
			{	
				printf("%s",s[s1[i]-'A']);
				flag=1;
				continue;
			}
			if(flag==1)
			{
				if(s1[i]>='0'&&s1[i]<='9')
				{	
					printf(" 0%c",s1[i]);
					break;
				}
				if(s1[i]>='A'&&s1[i]<='N')
				{	
					printf(" %d",s1[i]-'A'+10);
					break;
				}
			}
		}
	}
	for(i=0;(s3[i]!='\0')&&(s4[i]!='\0');i++)
	{	
		if(s3[i]==s4[i]&&s3[i]>='A'&&s3[i]<='z')
		{
			printf(":%02d",i);
			break;
		}
	}
	return 0;
} 

总结

自己没有做出来的原因是自己的对于字符串的使用不十分的熟练。

1015 德才论 (25 分)

题目链接

题意

输入第一行给出 3 个正整数
输出第一行首先给出达到最低分数线的考生人数 M,随后 M 行,每行按照输入格式输出一位考生的信息,考生按输入中说明的规则从高到低排序。当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。

思路

  • 1.录取的学生分为4类:
  • 2.第一类学生:如果德分>=H&&才分>=H,按照德分才分的总分降序排列录取,若总分相同,则按德分降序,若德分并列,则按准考证号升序排列。
  • 3.第二类学生:如果德分>=H&&才分<H,按照德分才分的总分降序排列录取,若总分相同,则按德分降序,若德分并列,则按准考证号升序排列,二类学生排在一类学生之后。
  • 4.第三类学生:如果德分<H&&才分<H&&德分>=才分,按照德分才分的总分降序排列录取,若总分相同,则按德分降序,若德分并列,则按准考证号升序排列,三类学生排在二类学生之后。
    第四类学生:不满足第一二三类的条件,但满足录取条件的学生。排在第三类学生之后。

坑点

  • 1.建议使用sort排序,不然的话可能会超时。

代码

#include<iostream>
#include<algorithm>
using namespace std;
struct student
{
	int a;
	int d;
	int c;
	int sum;
}stu[100000],stu1[100000],stu2[100000],stu3[100000],stu4[100000];
int cmp(struct student a, struct student b) {
    if (a.sum!=b.sum)
        return a.sum>b.sum;
    else if (a.d!=b.d)
        return a.d>b.d;
    else
        return a.a<b.a;
}
int main()
{
	int N,L,H,i,M=0;
	int j=0,k=0,l=0,m=0;
	scanf("%d %d %d",&N,&L,&H);
	for(i=0;i<N;i++)
	{
		scanf("%d %d %d",&stu[i].a,&stu[i].d,&stu[i].c);
		stu[i].sum=stu[i].d+stu[i].c;
	}
	for(i=0;i<N;i++)
	{
		if(stu[i].d>=L&&stu[i].c>=L)
		{
			M++;
			if(stu[i].d>=H&&stu[i].c>=H)
			{
				stu1[j]=stu[i];
				j++;
			}
			else if(stu[i].d>=H&&stu[i].c<H)
			{
				stu2[k]=stu[i];
				k++;
			}
			else if(stu[i].d<H&&stu[i].c<H&&stu[i].d>=stu[i].c)
			{
				stu3[l]=stu[i];
				l++;
			}
		    else 
			{
				stu4[m]=stu[i];
				m++;
			}
		}
	}
	sort(stu1, stu1+j, cmp);
	sort(stu2, stu2+k, cmp);
	sort(stu3, stu3+l, cmp);
	sort(stu4, stu4+m, cmp);
	printf("%d\n",M);
	for(i=0;i<j;i++)
	{
		printf("%d %d %d\n",stu1[i].a,stu1[i].d,stu1[i].c);
	}
	for(i=0;i<k;i++)
	{
		printf("%d %d %d\n",stu2[i].a,stu2[i].d,stu2[i].c);
	}
	for(i=0;i<l;i++)
	{
		printf("%d %d %d\n",stu3[i].a,stu3[i].d,stu3[i].c);
	}
	for(i=0;i<m;i++)
	{
		printf("%d %d %d\n",stu4[i].a,stu4[i].d,stu4[i].c);
	}
	return 0;
}
 

总结

自己没有审题清楚,没有看清每一个判断条件,也没有想到所以sort排序,不然的话错误的可能性就会变小。

这篇关于PTA编程题(11~15)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!