[题目]build the broken stacks

来源:互联网 发布:psd字体源码 编辑:程序博客网 时间:2024/05/16 12:38

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 100static 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 buildint 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);}