C++: [編程題]逛街

 [編程題]逛街

時間限制:C/C++ 2秒,其他語言4秒

空間限制:C/C++ 256M,其他語言512M

小Q在週末的時候和他的小夥伴來到大城市逛街,一條步行街上有很多高樓,共有n座高樓排成一行。

小Q從第一棟一直走到了最後一棟,小Q從來都沒有見到這麼多的樓,所以他想知道他在每棟樓的位置處能看到多少棟樓呢?(當前面的樓的高度大於等於後面的樓時,後面的樓將被擋住) 

 

輸入描述:


 

輸入第一行將包含一個數字n,代表樓的棟數,接下來的一行將包含n個數字wi(1<=i<=n),代表每一棟樓的高度。

1<=n<=100000;

1<=wi<=100000; 

 

輸出描述:

輸出一行,包含空格分割的n個數字vi,分別代表小Q在第i棟樓時能看到的樓的數量。

 

輸入例子1:

6
5 3 8 3 2 5

 

輸出例子1:

3 3 5 4 4 4

 

例子說明1:

當小Q處於位置3時,他可以向前看到位置2,1處的樓,向後看到位置4,6處的樓,加上第3棟樓,共可看到5棟樓。當小Q處於位置4時,他可以向前看到位置3處的樓,向後看到位置5,6處的樓,加上第4棟樓,共可看到4棟樓。
#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
    int n, val, index;
    cin >> n;
    vector<int> arr;

	for(index = 0; index < n; index++)
	{
		cin >> val;
		arr.push_back(val);
	}
	
	int sub_id, biggest_value, count;

	for(index = 0; index < n; index++)
	{
		count = 1;

		for(sub_id = index - 1; sub_id >= 0; sub_id--)
		{
            if(sub_id == (index - 1))
            {
                count++;
                biggest_value = arr[sub_id];
                continue;
            }
            
			 if(arr[sub_id] > biggest_value)
			{
				count++;
				biggest_value = arr[sub_id];
			}
		}

		for(sub_id = index + 1; sub_id < n; sub_id++)
		{
            if(sub_id == (index + 1))
            {
                count++;
                biggest_value = arr[sub_id];
                continue;
            }
            
			if(arr[sub_id] > biggest_value)
			{
				count++;
				biggest_value = arr[sub_id];
			}
		}
		cout << count << " ";
	}
    
	return 0;
}

 

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int n, val, index;
    cin >> n;
    int* arr = (int*)malloc(sizeof(int) * n);

	for(index = 0; index < n; index++)
	{
		scanf("%d", &val);
		*(arr+index) = val;
	}
	
	int sub_id, biggest_value, count;

	for(index = 0; index < n; index++)
	{
		count = 1;

		for(sub_id = index - 1; sub_id >= 0; sub_id--)
		{
            if(sub_id == (index - 1))
            {
                count++;
                biggest_value = *(arr + sub_id);
                continue;
            }
            
			 if(arr[sub_id] > biggest_value)
			{
				count++;
				biggest_value = *(arr + sub_id);
			}
		}

		for(sub_id = index + 1; sub_id < n; sub_id++)
		{
            if(sub_id == (index + 1))
            {
                count++;
                biggest_value = *(arr + sub_id);
                continue;
            }
            
			if(arr[sub_id] > biggest_value)
			{
				count++;
				biggest_value = *(arr + sub_id);
			}
		}
		printf("%d ", count);
	}
    
	return 0;
}

 

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int n, val, index;
    scanf("%d", &n);
    int* arr = (int*)malloc(sizeof(int) * n);

	for(index = 0; index < n; index++)
	{
		scanf("%d", &val);
		*(arr+index) = val;
	}
	
	int sub_id, biggest_value, count;

	for(index = 0; index < n; index++)
	{
		count = 1;

		for(sub_id = index - 1; sub_id >= 0; sub_id--)
		{
            if(sub_id == (index - 1))
            {
                count++;
                biggest_value = *(arr + sub_id);
                continue;
            }
            
			 if(arr[sub_id] > biggest_value)
			{
				count++;
				biggest_value = *(arr + sub_id);
			}
		}

		for(sub_id = index + 1; sub_id < n; sub_id++)
		{
            if(sub_id == (index + 1))
            {
                count++;
                biggest_value = *(arr + sub_id);
                continue;
            }
            
			if(arr[sub_id] > biggest_value)
			{
				count++;
				biggest_value = *(arr + sub_id);
			}
		}
		printf("%d ", count);
	}
    free(arr);
	return 0;
}

您的代碼已保存
運行超時:您的程序未能在規定時間內運行結束,請檢查是否循環有錯或算法複雜度過大。
case通過率爲50.00% 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章