ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PTA编程题(11~15)

2022-01-30 19:02:18  阅读:139  来源: 互联网

标签:11 15 int PTA else stu num && printf


PTA编程题(11~15)

文章目录

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排序,不然的话错误的可能性就会变小。

标签:11,15,int,PTA,else,stu,num,&&,printf
来源: https://blog.csdn.net/m0_63328909/article/details/122754965

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有