ccf刷题第6天(20180301,20180901,20181201)

跳一跳(20180301)

【问题描述】
  近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱。
  简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。
  如果跳到了方块上,但没有跳到方块的中心则获得1分;跳到方块中心时,若上一次的得分为1分或这是本局游戏的第一次跳跃则此次得分为2分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将+2,+4,+6,+8…)。
  现在给出一个人跳一跳的全过程,请你求出他本局游戏的得分(按照题目描述的规则)。
【输入格式】
  输入包含多个数字,用空格分隔,每个数字都是1,2,0之一,1表示此次跳跃跳到了方块上但是没有跳到中心,2表示此次跳跃跳到了方块上并且跳到了方块中心,0表示此次跳跃没有跳到方块上(此时游戏结束)。
【输出格式】
  输出一个整数,为本局游戏的得分(在本题的规则下)。
【样例输入】
1 1 2 2 2 1 1 2 2 0
【样例输出】
22
【数据规模和约定】
  对于所有评测用例,输入的数字不超过30个,保证0正好出现一次且为最后一个数字。

思路

代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	int score=0,k=0;
	int status;
	cin>>status;
	while(status!=0){
		if(status==1){
			k=0;
			score++;
		}
		else{
			k++;
			score+=2*k;
		}
		cin>>status; 
	} 
	cout<<score;
	return 0;
} 

卖菜(20180901)

【问题描述】
  在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜。
  第一天,每个商店都自己定了一个价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。具体的,每家商店都会将第二天的菜价设置为自己和相邻商店第一天菜价的平均值(用去尾法取整)。
  注意,编号为1的商店只有一个相邻的商店2,编号为n的商店只有一个相邻的商店n-1,其他编号为i的商店有两个相邻的商店i-1和i+1。
  给定第一天各个商店的菜价,请计算第二天每个商店的菜价。
【输入格式】
  输入的第一行包含一个整数n,表示商店的数量。
  第二行包含n个整数,依次表示每个商店第一天的菜价。
【输出格式】
  输出一行,包含n个正整数,依次表示每个商店第二天的菜价。
【样例输入】
8
4 1 3 1 6 5 17 9
【样例输出】
2 2 1 3 4 9 10 13
【数据规模和约定】
  对于所有评测用例,2 ≤ n ≤ 1000,第一天每个商店的菜价为不超过10000的正整数。

思路

代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,k=1;
	cin>>n;
	vector<int> vec(n),price(n);
	for(int i=0;i<n;i++)
		cin>>vec[i];
	price[0]=(vec[0]+vec[1])/2;
	for(int i=1;i<n-1;i++){
		price[i]=(vec[i-1]+vec[i]+vec[i+1])/3;		
	}
	price[n-1]=(vec[n-2]+vec[n-1])/2;
	for(int i=0;i<n;i++)
		cout<<price[i]<<" ";
	return 0;
}

小明上学(20181201)

【题目背景】
  小明是汉东省政法大学附属中学的一名学生,他每天都要骑自行车往返于家和学校。为了能尽可能充足地睡眠,他希望能够预计自己上学所需要的时间。他上学需要经过数段道路,相邻两段道路之间设有至多一盏红绿灯。
  京州市的红绿灯是这样工作的:每盏红绿灯有红、黄、绿三盏灯和一个能够显示倒计时的显示牌。假设红绿灯被设定为红灯 r 秒,黄灯 y 秒,绿灯 g 秒,那么从 0 时刻起,[0,r) 秒内亮红灯,车辆不许通过;[r, r+g) 秒内亮绿灯,车辆允许通过;[r+g, r+g+y) 秒内亮黄灯,车辆不许通过,然后依次循环。倒计时的显示牌上显示的数字 l(l > 0)是指距离下一次信号灯变化的秒数。
【问题描述】
  一次上学的路上,小明记录下了经过每段路的时间,和各个红绿灯在小明到达路口时的颜色和倒计时秒数。希望你帮忙计算此次小明上学所用的时间。
【输入格式】
  输入的第一行包含空格分隔的三个正整数 r、y、g,表示红绿灯的设置。这三个数均不超过 106。
  输入的第二行包含一个正整数 n(n ≤ 100),表示小明总共经过的道路段数和看到的红绿灯数目。
  接下来的 n 行,每行包含空格分隔的两个整数 k、t。k=0 表示经过了一段道路,耗时 t 秒,此处 t 不超过 106;k=1、2、3 时,分别表示看到了一个红灯、黄灯、绿灯,且倒计时显示牌上显示的数字是 t,此处 t 分别不会超过 r、y、g。
【输出格式】
  输出一个数字,表示此次小明上学所用的时间。
【样例输入】
30 3 30
8
0 10
1 5
0 11
2 2
0 6
0 3
3 10
0 3
【样例输出】
70
【样例说明】
  小明先经过第一段道路,用时 10 秒,然后等待 5 秒的红灯,再经过第二段道路,用时 11 秒,然后等待 2 秒的黄灯和 30 秒的红灯,再经过第三段、第四段道路,分别用时6、3秒,然后通过绿灯,再经过最后一段道路,用时 3 秒。共计 10 + 5 + 11 + 2 + 30 + 6 + 3 + 3=70 秒。
【评测用例规模与约定】
  测试点 1, 2 中不存在任何信号灯。
  测试点 3, 4 中所有的信号灯在被观察时均为绿灯。
  测试点 5, 6 中所有的信号灯在被观察时均为红灯。
  测试点 7, 8 中所有的信号灯在被观察时均为黄灯。
  测试点 9, 10 中将出现各种可能的情况。

思路

代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	int r,y,g,n,t=0;
	cin>>r>>y>>g>>n;
	int **arr=new int *[n];
	for(int i=0;i<n;i++)
		arr[i]=new int[2];
		
	for(int i=0;i<n;i++){
		for(int j=0;j<2;j++)
			cin>>arr[i][j];
	} 
	for(int i=0;i<n;i++){
		if(arr[i][0]==0)
			t+=arr[i][1];
		if(arr[i][0]==1)
			t+=arr[i][1];
		if(arr[i][0]==2)
			t=t+arr[i][1]+r;
		if(arr[i][0]==3)
			t=t;
	}
	cout<<t;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值