3.22打卡——L1-025 正整数A+B、L1-037 A除以B、L1-040 最佳情侣身高差、L1-041 寻找250

一、链接

PTA | 程序设计类实验辅助教学平台

二、题目、代码及问题

L1-025 正整数A+B

题目:

题的目标很简单,就是求两个正整数AB的和,其中AB都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

输入格式:

输入在一行给出AB,其间以空格分开。问题是AB不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是AB的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

输出格式:

如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?

输入样例1:

123 456

输出样例1:

123 + 456 = 579

输入样例2:

22. 18

输出样例2:

? + 18 = ?

输入样例3:

-100 blabla bla...33

输出样例3:

? + ? = ?

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    char a[10000],b[10000];
    int i=0,j=0,x=0,y=0,z=0;
    int sa=0,sb=0;
    while(1) 
    {
        scanf("%c",&a[i]);
        if (a[i]==' ')//遇到空格跳出,输入B
            break;
        if (a[i]<48||a[i]>9+48)
            x=1;
        i++;
    }
    int n=i;//记录A的长度
    if (n==0)//A是空字符串
        x=1;
    scanf("%s",b);
    for (j=0;b[j]!='\0';j++)
    {
        if (b[j]<48||b[j]>57)//不是符合要求的实数
            y=1;
    }
    if (x==0)
    {
        for (i=0;i<n;i++)
        {
            sa*=10;
            sa+=a[i]-48;//将字符数组转换成数字
        }
        if(sa>1000||sa<1)//超范围
            x=1;
    }
    if (y==0)
    {
        for (i=0;i<strlen(b);i++)
        {
            sb*=10;
            sb+=b[i]-48;//将字符数组转换成数字
        }
        if(sb>1000||sb<1)
            y=1;
    }
    if (x==1||y==1)//有一个不符合要求的,结果就输出?
        z=1;
    if (x==0)
        printf("%d",sa);
    else
        printf("?");
    printf(" + ");
    if (y==0)
        printf("%d",sb);
    else 
        printf("?");
    printf(" = ");
    if (z==0)
        printf("%d",sa+sb);
    else 
        printf("?");
    return 0;
}


问题:

有一个案例过不去不知道为什么。。。求会的大佬指点一下。

L1-037 A除以B

题目:

真的是简单题哈 —— 给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。

输入格式:

输入在第一行给出两个整数A和B(−100≤A,B≤100),数字间以空格分隔。

输出格式:

在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error。输出的商应保留小数点后2位。

输入样例1:

-1 2

输出样例1:

-1/2=-0.50

输入样例2:

1 -3

输出样例2:

1/(-3)=-0.33

输入样例3:

5 0

输出样例3:

5/0=Error

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    double a,b;
    cin >> a >> b;
    if (b>0)//a,b都是整数,没有小数
        printf("%.0lf/%.0lf=%.2lf",a,b,a/b);//结果保留2位小数
    else if (b==0)
        printf("%.0lf/%.0lf=Error",a,b);
    else
        printf("%.0lf/(%.0lf)=%.2lf",a,b,a/b);
    return 0;
}

L1-040 最佳情侣身高差

题目:

专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。

下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。

输入格式:

输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。

输出格式:

对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。

输入样例:

2
M 1.75
F 1.8

输出样例:

1.61
1.96

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,i,j;
    cin >> n;//人数
    double h;//身高
    char x;//性别
    for (i=0;i<n;i++)
    {
        cin >> x >> h;
        if (x=='M')//男
            h/=1.09;
        else    //女
            h*=1.09;
        printf("%.2lf\n",h);//注意保留两位小数
    }
    return 0;
}

L1-041 寻找250

题目:

对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。

输入格式:

输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。

输出格式:

在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。

输入样例:

888 666 123 -233 250 13 250 -222

输出样例:

5

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,i=1,h;
    while(1)
    {
        scanf("%d",&n);
        if (n==250)//不用管250后面的数,遇见第一个250直接跳出循环输出
        {
            h=i;
            break;
        }
        i++;
    }
    printf("%d",h);
    return 0;
}


问题:

        一开始想复杂了,一直在纠结怎么停止输入的问题,后来想通了,完全不用管后面数的死活,只找出第一个250的位置就可以了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值