PTA-暑期学校-Day7(C语言)

本文详细介绍了C语言解决一系列实际问题的示例,包括阶梯电价计算、成绩转换、周期规律判断等,展示了编程在日常生活中的应用。
摘要由CSDN通过智能技术生成

1 阶梯电价

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。

要求:

  1. 输入格式
    输入在一行中给出某用户的月用电量(单位:千瓦时)。
  2. 输出格式
    在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。
  3. 输入样例1

10

  1. 输出样例1

cost = 5.30

  1. 输入样例2

100

  1. 输出样例2

cost = 55.50

代码长度限制 16KB
时间限制 400ms
内存限制 64MB

代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int w;
    scanf("%d",&w);
    float cost;
    if(w<0)
        printf("Invalid Value!");
    if(w>50)
    {
        cost=50*0.53+(w-50)*0.58;
        printf("cost = %.2f",cost);
    }
    if(0<=w&&w<=50)
    {
        cost=w*0.53;
        printf("cost = %.2f",cost);
    }
    return 0;
}

2 成绩转换

本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:

  • 大于等于90分为A;
  • 小于90且大于等于80为B;
  • 小于80且大于等于70为C;
  • 小于70且大于等于60为D;
  • 小于60为E。

要求:

  1. 输入格式
    输入在一行中给出一个整数的百分制成绩。
  2. 输出格式
    在一行中输出对应的五分制成绩。
  3. 输入样例

90

  1. 输出样例

A

代码长度限制 16KB
时间限制 400ms
内存限制 64MB

代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int score;
    scanf("%d",&score);
    if(score>=90)
        printf("A");
    if(80<=score&&score<90)
        printf("B");
    if(70<=score&&score<80)
        printf("C");
    if(60<=score&&score<70)
        printf("D");
    if(score<60)
        printf("E");
    return 0;
}

3 三天打鱼两天晒网

假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?

要求:

  1. 输入格式
    输入在一行中给出一个不超过1000的正整数N。
  2. 输出格式
    在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。
  3. 输入样例1

103

  1. 输出样例1

Fishing in day 103

  1. 输入样例2

34

  1. 输出样例2

Drying in day 34

代码长度限制 16KB
时间限制 400ms
内存限制 64MB

代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int N;
    scanf("%d",&N);
    int yushu;
    yushu=N%5;
    if(yushu==0)
        printf("Drying in day %d",N);
    if(0<yushu&&yushu<=3)
        printf("Fishing in day %d",N);
    if(3<yushu&&yushu<5)
        printf("Drying in day %d",N);
    return 0;
}

4 计算天数

编写程序,计算某年某月某日是该年中的第几天。

要求:

  1. 输入格式
    输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
  2. 输出格式
    在一行输出日期是该年中的第几天。
  3. 输入样例1

2009/03/02

  1. 输出样例1

61

  1. 输入样例2

2000/03/02

  1. 输出样例2

62

代码长度限制 16KB
时间限制 400ms
内存限制 64MB

代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int y,m,d;
    scanf("%d/%d/%d",&y,&m,&d);
    int sum=0,flag=0;
    switch(m)
    {
        case 1: sum=0;break;
        case 2: sum=31;break;
        case 3: sum=59;break;
        case 4: sum=90;break;
        case 5: sum=120;break;
        case 6: sum=151;break;
        case 7: sum=181;break;
        case 8: sum=212;break;
        case 9: sum=243;break;
        case 10: sum=273;break;
        case 11: sum=304;break;
        default: sum=334;break;
    }
    sum+=d;
    if((y%4==0&&y%100!=0)||y%400==0)
        flag=1;
    if(flag==1&&m>2)
        sum++;
    printf("%d",sum);
    return 0;
}

5 三角形判断

给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。

要求:

  1. 输入格式
    输入在一行中顺序给出六个[−100,100]范围内的数字,即三个点的坐标x1、y1、x2、y2、x3、y3。
  2. 输出格式
    若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L = 周长, A = 面积”,输出到小数点后2位。
  3. 输入样例1

4 5 6 9 7 8

  1. 输出样例1

L = 10.13, A = 3.00

  1. 输入样例2

4 6 8 12 12 18

  1. 输出样例2

Impossible

代码长度限制 16KB
时间限制 200ms
内存限制 64MB

代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(void)
{
    double x1, x2, x3, y1, y2, y3;
    double a, b, c,s;
    double L, A;
    scanf("%lf %lf %lf %lf %lf %lf", &x1, &y1, &x2, &y2, &x3, &y3);
    a = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));
    b = sqrt((x1 - x3)*(x1 - x3) + (y1 - y3)*(y1 - y3));
    c = sqrt((x2 - x3)*(x2 - x3) + (y2 - y3)*(y2 - y3));
    if (a + b > c&&a + c > b&&b + c > a)
    {
        L = a + b + c;
        s = (a + b + c) / 2.0;
        A = sqrt(s*(s - a)*(s - b)*(s - c));
        printf("L = %.2f, A = %.2f", L, A);
    }
    else
        printf("Impossible");
    return 0;
}

6 统计素数并求和

统计给定整数M和N区间内素数的个数并对它们求和。

要求:

  1. 输入格式
    输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
  2. 输出格式
    在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
  3. 输入样例

10 31

  1. 输出样例

7 143

代码长度限制 16KB
时间限制 400ms
内存限制 64MB

代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int M,N;
    scanf("%d %d",&M,&N);
    int flag=0,sum=0;
    for(int i=M;i<=N;i++)
    {
        if(Prime(i))
        {
            flag++;
            sum=sum+i;
        }
    }
    printf("%d %d",flag,sum);
    return 0;
}
int Prime(int x)
{
    if(x==1)
        return 0;
    else
    {
        for (int j=2;j<=sqrt(x);j++)
        {
            if(x%j==0)
                return 0;
        }
    }
    return 1;
}

7 装箱问题

假设有N项物品,大小分别为s1、s2、…、si、…、sN,其中 si 为满足1≤ si ≤100的整数。要把这些物品装入到容量为100的一批箱子(序号1-N)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。

要求:

  1. 输入格式
    输入第一行给出物品个数N(≤1000);第二行给出N个正整数 si​(1≤ si ≤100,表示第i项物品的大小)。
  2. 输出格式
    按照输入顺序输出每个物品的大小及其所在的箱子序号,每个物品占1行,最后一行输出所需的箱子数目。
  3. 输入样例

8
60 70 80 90 30 40 10 20

  1. 输出样例

60 1
70 2
80 3
90 4
30 1
40 5
10 1
20 2
5

代码长度限制 16KB
时间限制 400ms
内存限制 64MB

代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int N;
    scanf("%d",&N);
    int box=0;
    int a[1000],r[100];
    for(int i=0;i<N;i++)
    {
        scanf("%d",&a[i]);
        r[i]=100;///箱子最初的容积为100
        for(int j=0;j<N;j++)
        {
            if(r[j]-a[i]>=0)///箱子容积大于物品大小时
            {
                r[j]=r[j]-a[i];///用容积减物品大小就是每个箱子剩余容积量
                printf("%d %d\n",a[i],j+1);
                if(box<j+1)
                    box=j+1;///输出盒子最终使用数量
                break;
            }
        }
    }
    printf("%d\n",box);
    return 0;
}
  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值