第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]
范围内的整数。
输入:
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
函数,实现根据输入来判断正方形边长最大值和正方形个数的功能,具体要求如下:
- 不能有纸剩余;
- 所有的正方形大小必须相同;
- 确保前两个条件满足的情况下,使正方形的边长尽可能的大。
- 将结果存放在
j
,k
变量中。
测试说明
样例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
输入:
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 **********/
}