7-21 高速公路超速处罚 (15 分)按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
输入格式:
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。
输出格式:
在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。
#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
typedef long long ll;
using namespace std;
int main()
{
int m, n;
cin>>m>>n;
int t = (m - n) * 100;
if(t / n < 10)
{
cout<<"OK";
}
else if
(t/ n >= 10 && t/ n <50)
{
cout<<"Exceed "<<t/ n + ((t%n)* 2) / n<<"%. Ticket 200";
}else{
cout<<"Exceed "<<t/ n + ((t%n)* 2) / n<<"%. License Revoked";
}
}
7-22 计算天数 (15point(s))
本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
typedef long long ll;
using namespace std;
int main()
{
int year, month, day;
int a[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char x;
cin>>year>>x>>month>>x>>day;
if(year%4 == 0 && year%100 != 0 || year % 400 == 0)
{
a[2] ++;
}
int sum = 0;
for(int i = 1; i < month;i ++)
{
sum+=a[i];
}
cout<<sum + day;
}
7-23 判断上三角矩阵 (15point(s))
上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。
输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。
#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
typedef long long ll;
using namespace std;
int main()
{
int m;
vector< int > num;
cin>>m;
for(int i = 0; i < m; i++)
{
int p;
cin>>p;
int key = 0;
for(int j = 0; j < p; j ++)
{
int g;
for(int k = 0; k < p; k ++)
{
cin>>g;
if(j > k && g != 0)
{
num.push_back(1);
key = 1;
}
}
}
if(key == 0)
{
num.push_back(0);
}
}
for(int i = 0; i < num.size(); i ++)
{
if(num[i])
{
cout<<"NO"<<endl;
}else{
cout<<"YES"<<endl;
}
}
}
7-24 统计大写辅音字母 (15point(s))
英文辅音字母是除A、E、I、O、U以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。
输入格式:
输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式:
输出在一行中给出字符串中大写辅音字母的个数。
输入样例:
HELLO World!
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
getline(cin, str);
int sum = 0;
for(int i = 0; i < str.length(); i ++)
{
if(str[i] >'A' && str[i] <='Z' && str[i] != 'E' && str[i] != 'I' &&str[i] != 'O' &&str[i] != 'U')
{
sum++;
}
}
cout<<sum;
}
7-25 时间换算 (15point(s))
本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)。
输入格式:
输入在第一行中以hh:mm:ss的格式给出起始时间,第二行给出整秒数n(<60)。
输出格式:
输出在一行中给出hh:mm:ss格式的结果时间。
输入样例:
11:59:40
30
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
int main()
{
int h, m, s;
char a;
int num;
cin>>h>>a>>m>>a>>s>>num;
s += num;
m += s/60;
h += m / 60;
s %= 60;
m %=60;
h %=24;
// cout<<h<<" "<<m<<" "<<s<<endl;
cout<<setfill('0')<<setw(2)<<h<<":"<<setfill('0')<<setw(2)<<m<<":"<<setfill('0')<<setw(2)<<s;
// int b = 3;
// cout<<setfill('0')<<setw(2)<<b;
}
7-26 求整数序列中出现次数最多的数 (15point(s))
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
输入格式:
输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。
输出格式:
在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[1010] = {99999999}, max = 1, tmp = 1, n, i, sign;
cin>>n;
for(i = 0;i < n;i++) cin>>a[i];
sort(a, a+n); //统计出现次数最多的数以及出现次数需要先排序(从小到大)
sign = a[0];
for(i = 1;i < n;i++)
{
if(a[i] == a[i-1]) //连续
{
tmp++;
if(tmp > max) max = tmp, sign = a[i-1]; //sign用于记录出现次数最多的数
}
else
{
tmp = 1;
}
}
cout<<sign<<" "<<max<<endl;
return 0;
}
7-27 统计一行文本的单词个数 (15point(s))
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
getline(cin, str);
int count = 0;
string str1 = " " + str + " ";
for(int i = 0; i < str1.length() - 1; i ++)
{
if(str1[i] ==' ' && str1[i + 1] != ' ')
{
count++;
}
}
cout<<count;
}
7-28 交换最小值和最大值 (15point(s))
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
#include <stdio.h>
main()
{
int n,i,a[10],c,d,min,max,j;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
min=max=a[0];
for(i=0;i<n;i++)
{
if(a[i]<=min)
{
min=a[i];
j=i;
}
}
c=a[0];
a[0]=min;
a[j]=c;
for(i=0;i<n;i++)
{
if(a[i]>=max)
{
max=a[i];
j=i;
}
}
d=max;
a[j]=a[n-1];
a[n-1]=d;
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
7-29 字符转换 (15point(s))
本题要求提取一个字符串中的所有数字字符(‘0’……‘9’),将其转换为一个整数输出。
输入格式:
输入在一行中给出一个不超过80个字符且以回车结束的字符串。
输出格式:
在一行中输出转换后的整数。题目保证输出不超过长整型范围。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string str1="";
string str;
getline(cin, str);
int key = 1;
for(int i = 0; i < str.length(); i ++)
{
if(str[i] == '0')
{
if(str1 == "")
{
continue;
}else{
str1+=str[i];
}
}else if(str[i] >='0' && str[i] <= '9'){
str1 += str[i];
}
}
if(str1 == "")
{
cout<<"0";
}else{
cout<<str1;
}
}
7-30 日K蜡烛图 (15point(s))
股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。以日K线为例,每天股票价格从开盘到收盘走完一天,对应一根蜡烛小图,要表示四个价格:开盘价格Open(早上刚刚开始开盘买卖成交的第1笔价格)、收盘价格Close(下午收盘时最后一笔成交的价格)、中间的最高价High和最低价Low。
如果Close<Open,表示为“BW-Solid”(即“实心蓝白蜡烛”);如果Close>Open,表示为“R-Hollow”(即“空心红蜡烛”);如果Open等于Close,则为“R-Cross”(即“十字红蜡烛”)。如果Low比Open和Close低,称为“Lower Shadow”(即“有下影线”),如果High比Open和Close高,称为“Upper Shadow”(即“有上影线”)。请编程序,根据给定的四个价格组合,判断当日的蜡烛是一根什么样的蜡烛。
输入格式:
输入在一行中给出4个正实数,分别对应Open、High、Low、Close,其间以空格分隔。
输出格式:
在一行中输出日K蜡烛的类型。如果有上、下影线,则在类型后加上with 影线类型。如果两种影线都有,则输出with Lower Shadow and Upper Shadow。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
float o, h, l, c;
cin>>o>>h>>l>>c;
int O = o * 1000;
int H = h * 1000;
int L = l * 1000;
int C = c * 1000;
int key = 0;
int high = 0, low = 0;
if(C > O)
{
cout<<"R-Hollow";
}else if(C < O)
{
cout<<"BW-Solid";
}else{
cout<<"R-Cross";
}
if(L < O && L < C)
{
cout<<" with Lower Shadow";
key = 1;
}
if(H > O && H > C)
{
if(key)
{
cout<<" and Upper Shadow";
}else{
cout<<" with Upper Shadow";
}
}
}