CCF入门篇练习(2)

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)


🍅 🍅 🍅 撸起袖子加油干 🔊

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值