Q:
The stairs stacked with block has been partially destroyed by the typhoon.
Write a program to return the minimum number of necessary blocks to restore the destroyed stairs.
However, the first stair’s heightmay don’t start from 1.(The first stair’s height maybe 1 or bigger than 1)
After restoration, the stairs should increase from the first stair to the end stair by 1 stair increment.
Ex) for the following stairs case, 17 blocks are required to restore the stairs (blue area)
If answer is more than 17, it is wrong answer. (For example, if stacking 7 more blocks in X position and return 24, the answer is incorrect)
|
|
|
|
|
| X |
|
|
|
|
| X |
|
|
|
|
| X |
|
|
|
|
| X |
|
|
|
|
| X |
|
|
|
|
| X |
|
|
|
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A:
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
static int data[SIZE];
static void build_data(void)
{
int c=0;
for (c=0; c<SIZE; c++)
{
data[c] = 1 + c + (rand() % 100);
}
}
int check(int data[SIZE])
{
//check func will return the proper num build for data[0]
//find the stair which dont need repair--key
int gap= data[0]-0;
int num = 0;
int i=1;
for(i=1; i<SIZE; i++)
{
if((data[i]-i)> gap)
{
gap = data[i] - i;
num = i;
}
}
return gap;
}
//the final brick should build
int sum(int data[SIZE])
{
int num[SIZE];
int sum=0;
int i,j;
num[0]=check(data);
int height=num[0]+data[0];//the stair 0
for (i=1; i<SIZE; i++)
{
//from stair 1
//height should be larger than data[i],check will do it
num[i]= ++height - data[i];
}
for(j=0; j<SIZE; j++)
sum += num[j];
return sum;
}
int test_main(int data[SIZE])
{
return sum(data);
}