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;
}
}
}