绿色计算大赛第二阶段题解

第1关:气温预测

挑战任务

根据每日气温数组,请重新生成一个数组,新数组对应位置的是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请用0来代替。

例如:给定一个数组 temps = {34,35,33,25,44,19,18,17} 新生成的数组应该为[1, 3, 2, 1, 0, 0, 0, 0]

temps数组第一天温度是34℃,第二天是35℃,所以对应新生成数组位置的数据应该是1,代表还需等待1天就会升温,第二天温度是35℃,还需等待3天才会出现比35℃还高的温度(44℃),第五天温度是44℃,之后都不会升温了,则用0来代替。

编程要求

补充完善右侧代码区中的dailyTemps函数,实现,最后返回计算的结果即可。

注意:气温 列表长度的范围是 [1, 10000]。每个气温的值的都是 [0, 100]范围内的整数。

测试说明

样例1

输入:

34 35 33 25 44 45 46 17

输出:

1 3 2 1 1 1 0 0


开始挑战吧,祝你成功!

/***************************
 * 函数功能: 根据一个时间段内的气温列表,来重新生成一个数组
 * return: 计算结果
 * @para array: 一段时间内的气温列表
 * @para size: 数组array的大小
***************************/
int* dailyTemps(int temps[], int size)
{
	int *result = new int[size];
	
	/********** BEGIN **********/
	for(int i=0;i<size;i++)
	{
		result[i]=0;
	}
	for(int i=0;i<size;i++)
	{
		for(int j=i+1;j<size;j++){
			if(temps[j]>temps[i]){
				result[i]=j-i;
				break;
			}
		}	
	}
	/********** END **********/
	return result;
}

第2关:折纸小游戏

挑战任务

树袋熊是“绿盟”社区的一名绿色资源爱好者。他买了一个长方形彩纸,想要裁剪成尽可能大的相同大小的正方形彩纸送给女朋友,而且贯彻绿色精神,不能有剩余。请你编程序来帮他追到女朋友吧!

题目描述:

长方形彩纸长m,宽n,求出裁剪的相同大小的正方形的边长j的最大值以及小正方形的个数k。其中m,n,j,k均为正整数。

输入:

第一行为长方形的长m
第二行为长方形的宽n

输出:

第一行输出正方形边长最大值j
第二行输出正方形个数k

编程要求

补充完善右侧代码区中的Square函数,实现根据输入来判断正方形边长最大值和正方形个数的功能,具体要求如下:

  • 不能有纸剩余;
  • 所有的正方形大小必须相同;
  • 确保前两个条件满足的情况下,使正方形的边长尽可能的大。
  • 将结果存放在jk变量中。

测试说明

样例1

输入:

4
2

输出:

2
2

样例2

输入:

7
3

输出:

1
21


开始挑战吧,祝你成功!

相当于求最大公约数

/***************************
 * 函数功能: 计算裁剪的相同大小的正方形
 * return: void
 * @para m: 长方形的长
 * @para n: 长方形的宽
 * @para j: 存放输出正方形边长最大值
 * @para k: 存放输出正方形个数
***************************/
void Square(int m, int n, int &j, int &k)
{
	/********** BEGIN **********/
	int z,m1=m,n1=n;
	if(m1<n1){
		int temp=m1;
		m1=n1;
		n1=temp;
	}
	while(m1%n1!=0){
		z=m1%n1;
		m1=n1;
		n1=z;
	}
	j=n1;
	k=(m/j)*(n/j);	
	/********** END **********/
}

第3关:渡口与船

挑战任务

给定一个渡口(二维的),请计算渡口中停了多少艘船。 船用 + 表示,空位用字母o表示。 你需要遵守以下规则:

  • 给你一个有效的渡口(二维数组),仅由船和空位组成。
  • 船只能水平或者垂直放置。换句话说,船只能由 1 行, N 列组成,或者 N 行, 1 列组成,其中N可以是任意大小。
  • 两艘船之间至少有一个水平或垂直的空位分隔,即没有相邻的船。

编程要求

补充完善右侧代码区中的countOfShips函数,实现根据输入的数组来判断船的数量。

测试说明

输入说明:

  • 第一行表示渡口的长和宽(m, n);
  • 接下输入m行n列的数据表示渡口的停船情况;

输出说明:

  • 渡口中船数量;

样例1

输入:

3 4
+ + + +
o o o o
o o o o

输出:

1

样例2

输入:

3 4
+ o o +
o o o +
o o o +

输出:

2

无效样例:

3 4
o o o +
+ + + +
o o o +

你不会收到这样的无效样例,因为船之间至少会有一个空位将它们分开。


开始挑战吧,祝你成功!

/***************************
 * 函数功能: 计算渡口中停了多少艘船
 * return: 渡口中停的艘船个数
 * @para ferry: 二维的渡口
 * @para m: 渡口的行数
 * @para n: 渡口的列数
***************************/
int countOfShips(char **ferry, int m, int n)
{

	/********** BEGIN **********/
	int num=0;
	for(int i=0;i<m;i++){
		for(int j=0;j<n;j++){
			if(ferry[i][j]=='+'){
				for(int k=i+1;k<m;k++){
					if(ferry[k][j]=='o')
						break;
					else
						ferry[k][j]='o';
				}
				int k2;
				for(k2=j+1;k2<n;k2++){
					if(ferry[i][k2]=='o')
						break;
				}
				num++;
				j=k2-1;
			}
		}
	}
	return num;
	/********** END **********/
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值