基础编程练习题(二)

7-11 统计字符 (15 分)
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。

输入格式:
输入为10个字符。最后一个回车表示输入结束,不算在内。

输出格式:
在一行内按照

letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
	char a;
	int letter = 0, blank = 0, digit = 0, other = 0;
	vector< string > strx;
	string str;
	int size = 0;
	while(1)
	{
		getline(cin, str);
		strx.push_back(str);
		size += str.length() + 1;
		if(size > 10)
		{
			break;
		}
	}
	for(int i = 0; i < strx.size(); i ++)
	{
		for(int j = 0; j < strx[i].size(); j ++)
		{
			if(strx[i][j] <='z' && strx[i][j] >='a' ||strx[i][j] <='Z' &&strx[i][j] >='A' )
			{
				letter ++;
			}
			if(strx[i][j] >='0' && strx[i][j] <='9')
			{
				digit ++;
			}
			if(strx[i][j] == ' ')
			{
				blank ++;
			}
		}
	}
	blank += strx.size() - 1;
	cout<<"letter = "<<letter<<", blank = "<<blank<<", digit = "<<digit<<", other = "<<(10 - blank - digit - letter);        
 } 

7-12 统计学生成绩 (15 分)
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:

大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。

输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
	int m;
	cin>>m;
	int a;
	int A = 0, B = 0, C = 0, D = 0, E = 0;
	for(int i = 0; i < m; i ++)
	{
		cin>>a;
		if(a< 60)
		{
			E++;
		}
		if(a>=60 && a < 70)
		{
			D++;
		}
		if(a>=70 && a < 80)
		{
			C++;
		}
		if(a>=80 && a < 90)
		{
			B++;
		}
		if(a>=90)
		{
			A++;
		}
		
	}
	cout<<A<<" "<<B<<" "<<C<<" "<<D<<" "<<E;
} 

7-13 求阶乘序列前N项和 (15 分)
本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和。

输入格式:
输入在一行中给出一个不超过12的正整数N。

输出格式:
在一行中输出整数结果。

#include<iostream>
#include<string>
#include<vector>
typedef long long ll;
using namespace std;
int main()
{
	int m;
	cin>>m;
	ll sum = 0;
	for(int i = 1; i <= m; i ++)
	{
		ll tmp = 1;
		for(int j = 1; j <= i; j ++)
		{
			tmp *= j;

		}
		sum += tmp;
	}
	cout<<sum;
} 

7-14 倒数第N个字符串 (15 分)
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, …, aaz, aba, abb, …, abz, …, zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。

输入格式:
输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤10
​5
​​ )。

输出格式:
在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。

#include<iostream>
#include<string>
#include<vector>
typedef long long ll;
using namespace std;
int main()
{
	int L, N;
	cin>>L>>N;
	N --;
	string str(L, 'z');
	int t = 26;
	for(int i = str.length() - 1; i >= 0; i --)
	{
		int x = N % t;
		str[i] = char(str[i] - x);
		N = N/26;
	}
	cout<<str;
	
} 

7-15 算术入门之加减乘除 (10 分)
对于输入的两个整数,按照要求输出其和差积商。

输入格式:
在一行内输入两个不超过100的非负整数a和b,中间以一个空格间隔,且保证b不为0。

输出格式:
共四行,格式是:

[a] + [b] = [a+b]
[a] - [b] = [a-b]
[a] * [b] = [a*b]
[a] / [b] = [a/b]
其中,带有方括号的内容(如[a]、[b]、[a+b]等)表示相应整数或运算结果的值,在输出时要用实际的值代替。

并且:如果a能够被b整除,那么a/b应输出为整数格式,否则a/b输出为带两位小数的格式。

提示:注意表达式中的空格。

#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
typedef long long ll;
using namespace std;
int main()
{
	int a, b;
	cin>>a>>b;
	cout<<a<<" + "<<b<<" = "<<a + b<<endl;
	cout<<a<<" - "<<b<<" = "<<a - b<<endl;
	cout<<a<<" * "<<b<<" = "<<a * b<<endl;
	if(a % b == 0)
	{
		cout<<a<<" / "<<b<<" = "<<a / b;
	}
	else{
		cout<<a<<" / "<<b<<" = "<<fixed<<setprecision(2)<<double(a)/ b<<endl;
	}
} 

7-16 计算火车运行时间 (15 分)
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。

输入格式:
输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。

输出格式:
在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。

#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
typedef long long ll;
using namespace std;
int main()
{
	int m, n;
	cin>>m>>n;
	int k = (n %100) - (m%100);
	int t = (n / 100 - m /100 + 24) %24;
	if(k < 0)
	{
		k+=60;
		t --;
	 } 
	cout<<setw(2)<<setfill('0')<<t<<":"<<setw(2)<<setfill('0')<<k;
} 

7-17 计算平均成绩 (15 分)
给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。

输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩”,中间以空格分隔。

输出格式:
首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。

#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
typedef long long ll;
using namespace std;
int main()
{
	int m;
	cin>>m; 
	vector< string > num;
	vector< string >str;
	vector< int >score;
	double avg = 0;
	for(int i = 0; i < m; i ++)
	{
		string num1,str1;
		int score1;
		cin>>num1>>str1>>score1;
		num.push_back(num1);
		str.push_back(str1);
		score.push_back(score1);
		avg += score1;
	}
	avg /= m;
	cout<<fixed<<setprecision(2)<<avg<<endl;
	for(int i = 0; i < m; i ++)
	{
		if(score[i]< avg)
		{
			cout<<str[i]<<" "<<num[i]<<endl;	
		}	
	}	
} 

7-18 计算个人所得税 (10 分)
假设个人所得税为:税率×(工资−1600)。请编写程序计算应缴的所得税,其中税率定义为:

当工资不超过1600时,税率为0;
当工资在区间(1600, 2500]时,税率为5%;
当工资在区间(2500, 3500]时,税率为10%;
当工资在区间(3500, 4500]时,税率为15%;
当工资超过4500时,税率为20%。
输入格式:
输入在一行中给出非负工资。

输出格式:
在一行输出个人所得税,精确到小数点后2位。

#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
typedef long long ll;
using namespace std;
int main()
{
	int m;
	cin>>m;
	if(m <= 1600)
	{
		float k = 0;
		cout<<fixed<<setprecision(2)<<k;
	}else if(m > 1600 && m <= 2500)
	{
		cout<<fixed<<setprecision(2)<<(float(m - 1600) * 0.05);
	}else if(m > 2500 && m <=3500)
	{
		cout<<fixed<<setprecision(2)<<(float(m - 1600) * 0.1);
	}else if(m >= 3500 && m < 4500)
	{
		cout<<fixed<<setprecision(2)<<(float(m - 1600) * 0.15);
	}else if(m > 4500)
	{
		cout<<fixed<<setprecision(2)<<(float(m - 1600) * 0.2);
	}
} 

7-19 字符串逆序 (15 分)
输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。

输入格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。

输出格式:
在一行中输出逆序后的字符串。

#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
typedef long long ll;
using namespace std;
int main()
{
	string str;
	getline(cin, str);
	for(int i = str.length() - 1; i >=0; i --)
	{
		cout<<str[i];
	}
} 

7-20 求奇数和 (15 分)
本题要求计算给定的一系列正整数中奇数的和。

输入格式:
输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。

输出格式:
在一行中输出正整数序列中奇数的和。

#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
typedef long long ll;
using namespace std;
int main()
{
	int a;
	ll sum = 0;
	while(1)
	{
		cin>>a;
		if(a <= 0)
		{
			cout<<sum;
			break;
		}else if(a % 2)
		{
			sum += a;
		}
	}
} 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值