你好呀,我是目录
1013. 识别三角形
题目:输入三个正整数,判断能否构成三角形的三边,如果不能,输出“NO”。如果能构成三角形,判断构成什么三角形?按等边、直角、一般三角形分类,依次输出对应的三角形类型“Equilateral”、“Right”、“General”。
数据范围限制
1<=a,b,c<=1000
输入
输入一行三个用空格隔开的正整数a,b,c,表示三角形的三条边长。
输出
输出对应三角形的类型,如果不能构成三角形,输出“NO”,如果是等边三角形输出“Equilateral”,如果是直角三角形输出“Right”,其他三角形则输出“General”。
样例输入
3 4 5
样例输出
Right
C语言
#include <stdio.h>
#include <math.h>
int main()
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int x, y, z;
x = pow(a, 2);
y = pow(b, 2);
z = pow(c, 2);
if (a + b > c && a + c > b && b + c > a)
{
if (a == b && a == c && b == c)
printf("Equilateral");
else if (x + y == z || x + z == y || y + z == x)
printf("Right");
else
printf("General");
}
else
printf("NO");
return 0;
}
C++
#include <iostream>
#include <cmath> // 数学函数库所需头文件
using namespace std;
int main()
{
int a, b, c;
cin >> a >> b >> c;
int x, y, z;
x = pow(a, 2);
y = pow(b, 2);
z = pow(c, 2);
// 能构成三角形的三边条件:任意两边之和大于第三边(必须都成立,&&全真才真,一假即假)
if (a + b > c && a + c > b && b + c > a)
{
// 等边三角形(三边相等)
if (a == b && a == c && b == c)
cout << "Equilateral" << endl;
// 直角三角形(勾股定理)
else if (x + y == z || x + z == y || y + z == x)
cout << "Right" << endl;
// 其他三角形
else
cout << "General" << endl;
}
else
cout << "NO" << endl;
return 0;
}
🍅 Try it 🗝 1013. 识别三角形 (Standard IO)
注:在判断等边三角形时,必须三边相等,即if (a == b && a == c && b == c)
,但&&错写成||,即if (a == b || a == c || b == c)
提交时,该题仍通过,我认为这是不严谨的。
1014. 写评语
题目:输入某学生成绩score,根据成绩好坏输出相应评语。如果成绩在大于等于90,输出“Excellent”;如果成绩在大于等于80分且小于90分,输出“Good”;如果成绩大于等于60分且小于80分,输出“Pass”;成绩小于60分,输出“Fail”。
数据范围限制
0<=score<=100
输入
输入一个整数score,表示学生的成绩
输出
输出对应的评语。
样例输入
65
样例输出
Pass
C语言
#include <stdio.h>
int main()
{
int score;
scanf("%d", &score);
score /= 10;
switch(score)
{
case 10:
case 9: printf("Excellent");
break;
case 8: printf("Good");
break;
case 7:
case 6: printf("Pass");
break;
default: printf("Fail");
}
return 0;
}
C++
#include <iostream>
using namespace std;
int main()
{
int score;
cin >> score;
score /= 10;
switch(score)
{
case 10:
case 9: cout << "Excellent" << endl;
break;
case 8: cout << "Good" << endl;
break;
case 7:
case 6: cout << "Pass" << endl;
break;
default:cout << "Fail" << endl;
break;
}
return 0;
}
🍅 Try it 🗝 1014. 写评语 (Standard IO)
注:若缺少case 10:
,该题提交仍通过,这是错误的。据题意,数据范围限制 0<=score<=100,包括100。
1016. 计算天数
题目:输入年份与月份,求该月共有多少天。
数据范围限制
1000<=year<=3000,1<=month<=12
输入
输入两个空格隔开的正整数year和month,分别表示年份和月份
输出
输出对应year这一年month这个月的天数。
样例输入
2000 2
样例输出
29
C语言
#include <stdio.h>
int main()
{
int year, month;
scanf("%d %d", &year, &month);
int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if ((year % 4 == 0 && year % 100 != 0)|| year % 400 == 0)
months[2] = 29;
printf("%d", months[month]);
return 0;
}
C++
#include <iostream>
using namespace std;
int main()
{
int year, month;
cin >> year >> month;
// 数组下标从零开始,下标0的数组初始化0,即可实现下标代表月份,初始值代表不同月份的天数
int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 判断闰年(能被4整除但不能被100整除 或者 能被400整除)
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
months[2] = 29; // 闰年2月份天数29天
cout << months[month];
return 0;
}
🍅 Try it 🗝 1016. 计算天数 (Standard IO)
1017. 价格查询
题目:编程实现以下功能:查询水果的单价。有4种水果,苹果(apples)、梨(pears)、桔子(oranges)和葡萄(grapes),单价分别是3.00元/公斤,2.50元/公斤,4.10元/公斤和10.20元/公斤。
运行程序后,首先在屏幕上显示以下菜单(编号和选项)(见样例)。
当用户输入编号1~4,显示相应水果的单价(保留1位小数);输入0,退出查询;输入其他编号,显示价格为0。
输入
输入一个整数。
输出
输出对应的结果。
样例输入
3
样例输出
[1] apples
[2] pears
[3] oranges
[4] grapes
[0] Exit
price=4.1
C语言
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
printf("[1] apples\n");
printf("[2] pears\n");
printf("[3] oranges\n");
printf("[4] grapes\n");
printf("[0] Exit\n");
if (n == 0)
return 0;
else
{
switch(n)
{
case 1: printf("price=3.0");
break;
case 2: printf("price=2.5");
break;
case 3: printf("price=4.1");
break;
case 4: printf("price=10.2");
break;
default: printf("price=0");
break;
}
}
return 0;
}
C++
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
cout << "[1] apples\n"
<< "[2] pears\n"
<< "[3] oranges\n"
<< "[4] grapes\n"
<< "[0] Exit\n";
if (n == 0)
return 0; // 输入0,退出查询
else
{
switch(n)
{
case 1: cout << "price=3.0";
break;
case 2: cout << "price=2.5";
break;
case 3: cout << "price=4.1";
break;
case 4: cout << "price=10.2";
break;
default: cout << "price=0";
break;
}
}
return 0;
}
🍅 Try it 🗝 1017. 价格查询 (Standard IO)
1020. 数字识别
题目:输入一个不多于四位的正整数,求出它是几位数,并分别打印出各位上的数字。
输入
输入一个不多于四位的正整数x。
输出
第一行输出x的位数num,接下来num行从高位到低位输出x的每一位上的数字。
样例输入
123
样例输出
C语言
#include <stdio.h>
int main()
{
int x, digit;
int a[]={0};
digit = 0;
scanf("%d", &x);
for (int i = 0; x != 0; i++)
{
a[i] = x % 10;
digit++;
x /= 10;
}
printf("%d\n", digit);
for (int i = digit; i > 0; i--)
printf("%d\n", a[i-1]);
return 0;
}
C++
#include <iostream>
using namespace std;
int main()
{
int x, digit;
int a[] = {0};
digit = 0;
cin >> x;
for (int i = 0; x != 0; i++)
{
a[i] = x % 10; // 存储各位上的数字
digit++;
x /= 10;
}
cout << digit << endl; // 输出总位数
for(int i = digit; i >= 1; i--)
cout << a[i - 1] << endl; // 从高位到低位输出x的每一位上的数字
return 0;
}
🍅 Try it 🗝 1020. 数字识别 (Standard IO)
1021. 发放奖金
题目:企业发放的奖金根据利润分段计算提成。当利润I低于或等于10万元的,奖金可提10%;利润高于10万元,低于20万元,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万的,低于20万的部分仍按上述办法提成(下同)。高于20万元的部分按5%提成;40万到60万时,高于40万的部分按3%提成;60万到100万时,高于60万的部分按1.5%提成;I>=100万元时,超过100万元的部分按1%提成。输入当月利润I,求应发奖金总数(单位为元)?(输出保留小数点后三位)
输入
输入实数I,表示利润。
输出
输出奖金数,答案保留三位小数。
样例输入
100000
样例输出
10000.000
C语言
#include <stdio.h>
int main()
{
double l, b;
scanf("%lf", &l);
double b1, b2, b3, b4, b5;
b1 = 100000 * 0.1;
b2 = b1 + 100000 * 0.075;
b3 = b2 + 200000 * 0.05;
b4 = b3 + 200000 * 0.03;
b5 = b4 + 400000 * 0.015;
if (l <= 100000)
b = l * 0.1;
else if (l < 200000)
b = b1 + (l - 100000) * 0.075;
else if (l < 400000)
b = b2 + (l - 200000) * 0.05;
else if (l < 600000)
b = b3 + (l - 400000) * 0.03;
else if (l < 1000000)
b = b4 + (l - 600000) * 0.015;
else
b = b5 + (l - 1000000) * 0.01;
printf("%.3lf", b);
return 0;
}
C++
#include <iostream>
#include <iomanip> // 保留小数位所需头文件
using namespace std;
int main()
{
double p, b; // profit:利润 bonus:奖金
cin >> p;
double b1, b2, b3, b4, b5;
b1 = 100000 * 0.1;
b2 = b1 + 100000 * 0.075;
b3 = b2 + 200000 * 0.05;
b4 = b3 + 200000 * 0.03;
b5 = b4 + 400000 * 0.015;
if (p <= 100000)
b = p * 0.1;
else if (p < 200000)
b = b1 + (p - 100000) * 0.075;
else if (p < 400000)
b = b2 + (p - 200000) * 0.05;
else if (p < 600000)
b = b3 + (p - 400000) * 0.03;
else if (p < 1000000)
b = b4 + (p - 600000) * 0.015;
else
b = b5 + (p - 1000000) * 0.01;
cout << fixed << setprecision(3) << b << endl; // 保留三位小数
return 0;
}
🍅 Try it 🗝 1021. 发放奖金 (Standard IO)
1023. 最大跨度
题目:给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值 = 最大值减去最小值)。
输入
输入一共两行,第1行为序列的个数n(1≤n≤1000),第2行为序列的n个不超过1000的非负整数,整数之间以一个空格分隔。
输出
输出最大跨度值。
样例输入
6
3 0 8 7 5 9
样例输出
9
C++
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int num, max, min;
max = 0;
min = 1001;
// 先找出序列中最大值和最小值
for (int i = 1; i <= n; i++)
{
cin >> num;
if (num > max)
max = num;
if (num < min)
min = num;
}
// 最大值-最小值=最大跨度值
cout << max - min << endl;
return 0;
}
🍅 Try it 🗝 1023. 最大跨度 (Standard IO)
1024. 因子个数
题目:对于任意给定的一个正整数,计算其因数个数。
输入样例:
6
输出样例:
4
说明:1、2、3、6都是6的因数。因此,输出4。
输入
输入正整数N。
输出
输出N的因子个数。
样例输入
6
样例输出
4
做法一:暴力穷举法(不推荐) |
---|
后果: 可能会造成时间超限 |
建议:对代码进行优化,尽量减少循环次数 |
C++
#include <iostream>
using namespace std;
int main()
{
int num;
cin >> num;
int count = 0;
for (int i = 1; i <= num; i++)
if (num % i == 0)
count++;
cout << num << endl;
return 0;
}
做法二:平方根穷举法 |
---|
若a * a = n 则a为n的因子 (只计数一次) |
若a * b = n 且 a != b (计数两次) |
C++
#include <iostream>
#include <cmath> // 使用数学函数库所需的头文件
using namespace std;
int main()
{
int num;
cin >> num;
int x;
x = sqrt(num);
int cnt = 0;
for (int i = 1; i <= x; i++)
if (num % i == 0)
cnt += 2;
if (x * x == num)
cnt--;
cout << cnt << endl;
return 0;
}
🍅 Try it 🗝 1024. 因子个数 (Standard IO)
1025. 统计奖牌
题目:2008年北京奥运会,A国的运动员参与了n天的决赛项目(1≤n≤17)。现在要统计一下A国所获得的金、银、铜牌数目及总奖牌数。
输入
输入n+1行,第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金、银、铜牌数目,以一个空格分开。
输出
输出仅1行,包括4个整数,为A国所获得的金、银、铜牌总数及总奖牌数,以一个空格分开。
样例输入
3
1 0 3
3 1 0
0 3 0
样例输出
4 4 3 11
C++
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
// 打印矩阵
int a[n][3];
for (int i = 0; i < n; i++)
for (int j = 0; j < 3; j++)
cin >> a[i][j];
// 列相加
int medals[3] = {0};
for (int j = 0; j < 3; j++)
for (int i = 0; i < n; i++)
medals[j] += a[i][j];
// 输出金、银、铜牌总数及总奖牌数
int sum = 0;
for (int k = 0; k < 3; k++)
{
cout << medals[k] << " ";
sum += medals[k];
}
cout << sum << endl;
return 0;
}
🍅 Try it 🗝 1025. 统计奖牌 (Standard IO)
1026. 表演打分
题目:在一次运动会方队表演中,学校安排了十名老师进行打分。对于给定的每个参赛班级的不同打分(百分制整数),按照去掉一个最高分、去掉一个最低分,再算出平均分的方法,得到该班级的最后得分。
输入
一行10个用空格隔开的正整数,表示十名老师的打分。
输出
输出该班级的最终得分,答案保留三位小数。
样例输入
90 89 92 90 93 95 88 90 89 88
样例输出
90.125
C++
法一:查找最高分和最低分,总分减去最高分和最低分,再除以八。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int a[10];
int max, min;
double sum, average;
min = 101;
max = 0;
for (int i = 1; i <= 10; i++)
{
cin >> a[i];
if (a[i] > max)
max = a[i]; // 最大值
if (a[i] < min)
min = a[i]; // 最小值
sum += a[i];
}
average = (sum - max - min) / 8;
cout << fixed << setprecision(3) << average << endl;
return 0;
}
法二:使用sort函数 (推荐)
#include <iostream>
#include <algorithm> // algorithm:算法库(查找,排序,计数,操作)
#include <iomanip> // 保留小数位所需的头文件
using namespace std;
// 比较函数
bool cmp(int x, int y)
{
return x < y;
}
int main()
{
int a[10];
for (int i = 0; i < 10; i++)
cin >> a[i];
// 排序
sort(a, a + 10, cmp);
int sum = 0;
for (int i = 1; i < 9; i++) // 去掉最高分和最低分
sum += a[i]; // 得分累加
double average = 1.0 * sum / 8;
cout << fixed << setprecision(3) << average << endl; // 保留三位小数
return 0;
}
sort函数 |
---|
头文件:#include <algorithm> |
sort函数三个参数解释: |
第一个参数:排序的起始点 |
第二个参数:排序的终止点 |
第三个参数:排序函数 |
🍅 Try it 🗝 1026. 表演打分 (Standard IO)
🍅 🍅 🍅 撸起袖子加油干 🔊