PTA-暑期学校-Day7-C语言
1 阶梯电价
为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。
要求:
- 输入格式:
输入在一行中给出某用户的月用电量(单位:千瓦时)。 - 输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。 - 输入样例1:
10
- 输出样例1:
cost = 5.30
- 输入样例2:
100
- 输出样例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。
要求:
- 输入格式:
输入在一行中给出一个整数的百分制成绩。 - 输出格式:
在一行中输出对应的五分制成绩。 - 输入样例:
90
- 输出样例:
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天中是“打鱼”还是“晒网”?
要求:
- 输入格式:
输入在一行中给出一个不超过1000的正整数N。 - 输出格式:
在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。 - 输入样例1:
103
- 输出样例1:
Fishing in day 103
- 输入样例2:
34
- 输出样例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 计算天数
编写程序,计算某年某月某日是该年中的第几天。
要求:
- 输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。 - 输出格式:
在一行输出日期是该年中的第几天。 - 输入样例1:
2009/03/02
- 输出样例1:
61
- 输入样例2:
2000/03/02
- 输出样例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),检验它们能否构成三角形。
要求:
- 输入格式:
输入在一行中顺序给出六个[−100,100]范围内的数字,即三个点的坐标x1、y1、x2、y2、x3、y3。 - 输出格式:
若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L = 周长, A = 面积”,输出到小数点后2位。 - 输入样例1:
4 5 6 9 7 8
- 输出样例1:
L = 10.13, A = 3.00
- 输入样例2:
4 6 8 12 12 18
- 输出样例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区间内素数的个数并对它们求和。
要求:
- 输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。 - 输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。 - 输入样例:
10 31
- 输出样例:
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)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。
要求:
- 输入格式:
输入第一行给出物品个数N(≤1000);第二行给出N个正整数 si(1≤ si ≤100,表示第i项物品的大小)。 - 输出格式:
按照输入顺序输出每个物品的大小及其所在的箱子序号,每个物品占1行,最后一行输出所需的箱子数目。 - 输入样例:
8
60 70 80 90 30 40 10 20
- 输出样例:
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;
}