基础编程练习(三)

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";
		}
	}
	 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值