PTA团体程序设计天梯赛-练习集31-35题

L1-031 到底是不是太胖了

据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知 1 公斤等于 2 市斤。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。

输入格式:

输入第一行给出一个正整数N(≤ 20)。随后N行,每行给出两个整数,分别是一个人的身高H(120 < H < 200;单位:厘米)和真实体重W(50 < W ≤ 300;单位:市斤),其间以空格分隔。

输出格式:

为每个人输出一行结论:如果是完美身材,输出You are wan mei!;如果太胖了,输出You are tai pang le!;否则输出You are tai shou le!

输入样例:

3
169 136
150 81
178 155

输出样例:

You are wan mei!
You are tai shou le!
You are tai pang le!
#include<stdio.h>
#include<math.h>
int main (void)
{
    int i,n;
    scanf("%d\n",&n);
    for(i=0;i<n;i++){
        float a,b;
        scanf("%f %f",&a,&b);
        float standard = (a-100)*0.9*2;
        //顺序不一样也不行吗
     if(fabs(b-standard)<standard*0.1) printf("You are wan mei!\n");
       else if(standard<b) printf("You are tai pang le!\n");
        else printf("You are tai shou le!\n");
    }
    return 0;
}

 L1-032 Left-pad

根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块?就是在字符串前填充一些东西到一定的长度。例如用*去填充字符串GPLT,使之长度为10,调用left-pad的结果就应该是******GPLT。Node社区曾经对left-pad紧急发布了一个替代,被严重吐槽。下面就请你来实现一下这个模块。

输入格式:

输入在第一行给出一个正整数N(≤104)和一个字符,分别是填充结果字符串的长度和用于填充的字符,中间以1个空格分开。第二行给出原始的非空字符串,以回车结束。

输出格式:

在一行中输出结果字符串。

输入样例1:

15 _
I love GPLT

输出样例1:

____I love GPLT

输入样例2:

4 *
this is a sample for cut

输出样例2:

 cut
#include<stdio.h>
#include<string.h>
int main(void)
{
    //需要2个数组,
    int n;
    char ch;
    scanf("%d %c\n",&n,&ch);
    char arr2[1010000];
     gets(arr2);
    size_t len = strlen(arr2);
    int x = n- len;
    if(x>=0){
    for(int i=1;i<=x;i++) {
        printf("%c",ch);
    }
    printf("%s",arr2);}
    else{
        for(int i=len-n;i<=len;i++){
            putchar(arr2[i]);
        }
    }
    return 0;
}

 L1-033 出生年【这一题注意统计编号出现统计次数的方法,利用数组及下标】【还有统计一个数不同数字有几个难点】

以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。

输入格式:

输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1, 3000]之间,n可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。

输出格式:

根据输入,输出x和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n个数字都不相同”是指不同的数字正好是n个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。

输入样例1:

1988 4

输出样例1:

25 2013

输入样例2:

1 2

输出样例2:

0 0001
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int m=0;

int main(){
    int y,n,sum=0,index=0,arr[10]={0},temp=0;
	cin>>y>>n;
	for(int i=y;;i++){
		temp=i;
		//因为%10,会有10种数字,0-9,将数字%10后,作为下标改变数组的值
		//年份不超过3000,循环四次即可
		for(int j=0;j<4;j++){
			index=temp%10;
			arr[index]++;
			temp/=10;
		}
		//计算数组中不同的数字的总个数
		for(int j=0;j<10;j++){
			if(arr[j]!=0)sum++;
		}
		//开始判断
		if(sum==n){
			printf("%d %04d",i-y,i);
			break;
		}
		//如果不符合题意,全部清零,重新循环
		for(int j=0;j<10;j++)arr[j]=0;
		sum=0;
	}
	
	return 0;
}


 L1-034 点赞【这一题也用到了上一题数组计数的方法】

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。

输入格式:

输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K F1​⋯FK​”,其中1≤K≤10,Fi​(i=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。

输出格式:

统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。

输入样例:

4
3 889 233 2
5 100 3 233 2 73
4 3 73 889 2
2 233 123

输出样例:

233 3
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;


int main(){
   int n;
	cin>>n;
	int arr1[1002]={0},s,k;
	//和上一题类似,编号作为数组下标并将此时数组值++
	for(int i=0;i<n;i++){
		cin>>k;
		for(int j=0;j<k;j++){
			cin>>s;
			arr1[s]++;
		}
	}
	
	//开始寻找最大的数组值即次数,和下标
    int max_num=arr1[0],max_index=0;//次数,编号
	for(int i=1;i<1002;i++){
		if(max_num<=arr1[i]){
			max_num=arr1[i];
			max_index=i;//此时隐含了,当二者次数相等时,
			           //要编号大的那一个
		}
	}
	cout<<max_index<<" "<<max_num<<endl;
	return 0;
}


 L1-035 情人节

以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家。第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单,请你找出那两位要请客的倒霉蛋。

输入格式:

输入按照点赞的先后顺序给出不知道多少个点赞的人名,每个人名占一行,为不超过10个英文字母的非空单词,以回车结束。一个英文句点.标志输入的结束,这个符号不算在点赞名单里。

输出格式:

根据点赞情况在一行中输出结论:若存在第2个人A和第14个人B,则输出“A and B are inviting you to dinner...”;若只有A没有B,则输出“A is the only one for you...”;若连A都没有,则输出“Momo... No one is for you ...”。

输入样例1:

GaoXZh
Magi
Einst
Quark
LaoLao
FatMouse
ZhaShen
fantacy
latesum
SenSen
QuanQuan
whatever
whenever
Potaty
hahaha
.

输出样例1:

Magi and Potaty are inviting you to dinner...

输入样例2:

LaoLao
FatMouse
whoever
.

输出样例2:

FatMouse is the only one for you...

输入样例3:

LaoLao
.

输出样例3:

Momo... No one is for you ...
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;


int main(){
   string str1[1000];
	int cnt=0;
	//注意是怎么读取的,还有要注意的是,字符串只能和字符串比较,
	//所以判断结束标志时2,用双引号,不是单引号
	while(cin>>str1[cnt]){
		if(str1[cnt++]==".")break;
	}
	//根据条件输出
	if(cnt<3) cout<<"Momo... No one is for you ...";
	else if(cnt<14)cout<<str1[1]<<" is the only one for you...";
	else cout<<str1[1]<<" and "<<str1[13]<<" are inviting you to dinner...";
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值