数据结构题,来人帮帮我吧

img

按题中的要求,写一个代码,要有输入功能,输入房子高度,可以输出哪些是海景房。


#include<stdio.h>
#include<stdlib.h>
int main(){
    int A[100];
    int n,i,k,kk,flag;
    printf("请问输入多少个房子信息:");
    scanf("%d",&n);
    printf("输入房子高度:\n");
    for(i=0;i<n;i++)
        scanf("%d",&A[i]);
    //找出景房
    for(k=0;k<n;k++)
    {
        flag=0;
        for(kk=k+1;kk<n;kk++)
        {
            if(A[kk]>A[k])
            {
            flag=1;
            }
        }
        if(flag==0)
            printf("%d 是景房高度%d\n",k+1,A[k]);
    }



return 0;
}

这个有输入输出,请采纳

不考虑时间限制的话,就是数组每个元素都和前面所有元素比较,判断是否都大于它们,如果是,那这栋房就是海景房

#include <stdio.h>

int main()
{
    int A[11] = {28, 40, 21, 30, 25, 17, 27, 15, 24, 20, 10};
    int i, j;

    // 从西到东扫描数组
    for (i = 0; i < 11; i++)
    {
        // 检查该房子是否比它东边的所有房子都高
        for (j = i + 1; j < 11; j++)
        {
            if (A[i] <= A[j])
            {
                // 该房子不是湖景房,跳出循环
                break;
            }
        }

        // 如果循环完成,说明该房子是湖景房
        if (j == 11)
        {
            printf("House at position %d is a lakeview house\n", i + 1);
        }
    }

    return 0;
}

暴力法循环遍历


#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    std::vector<int> vec;

    std::cout << "您要输入多少栋楼?" << std::endl;
    int nHouse = 0;
    std::cin >> nHouse;

    // 输入楼栋
    for (int i = 0; i < nHouse; ++i)
    {
        int nHeight = 0;
        std::cout << "请输入第" << i + 1 << "栋楼的高度?" << std::endl;
        std::cin >> nHeight;
        vec.push_back(nHeight);
    }

    // 查找所有的海景房
    int nSize = vec.size();
    for (int i = 0; i < nSize; ++i)
    {
        bool bIsHouse = false;
        for (int j = 1; j < nSize; ++j)
        {
            if (vec[i] < vec[j])
            {
                bIsHouse = true;
            }
        }
        if (!bIsHouse)
        {
            std::cout << "第" << i + 1 << "栋楼是海景房" << std::endl;
        }
    }

    return 0;
}

下面代码使用 单调栈 结构实现


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

#define MAX_SIZE 100

// 定义单调栈
typedef struct {
    int data[MAX_SIZE];  // 单调栈中的数据
    int top;  // 单调栈的栈顶位置
} Stack;

// 初始化单调栈
void init_stack(Stack *s) {
    s->top = -1;
}

// 判断单调栈是否为空
int is_empty(Stack *s) {
    return s->top == -1;
}

// 判断单调栈是否已满
int is_full(Stack *s) {
    return s->top == MAX_SIZE - 1;
}

// 将数字 x 压入单调栈中
void push(Stack *s, int x) {
    if (is_full(s)) {
        printf("Error: stack is full.\n");
        exit(1);
    }
    s->top++;
    s->data[s->top] = x;
}

// 弹出单调栈顶元素
void pop(Stack *s) {
    if (is_empty(s)) {
        printf("Error: stack is empty.\n");
        exit(1);
    }
    s->top--;
}

// 获取单调栈顶元素
int peek(Stack *s) {
    if (is_empty(s)) {
        printf("Error: stack is empty.\n");
        exit(1);
    }
    return s->data[s->top];
}

// 找出湖景房
void find_lakeview_houses(int houses[], int n) {
    Stack s;  // 单调栈
    init_stack(&s);  // 初始化单调栈

    // 遍历数组中的每一个数字
    for (int i = 0; i < n; i++) {
        // 如果单调栈为空,将数字压入单调栈中
        if (is_empty(&s)) {
            push(&s, houses[i]);
        } else {
            // 循环,直到单调栈为空或者单调栈顶元素比当前数字小
            while (!is_empty(&s) && peek(&s) < houses[i]) {
                // 将单调栈顶元素弹出
                pop(&s);
            }
            // 将数字压入单调栈中
            push(&s, houses[i]);
        }
    }

    // 输出单调栈中剩余的所有元素,即为所有的湖景房
    printf("Lakeview houses: ");
    while (!is_empty(&s)) {
        printf("%d ", peek(&s));
        pop(&s);
    }
    printf("\n");
}

int main() {
    int n;
    printf("Enter the number of houses: ");
    scanf("%d", &n);

    int houses[n];
    printf("Enter the heights of the houses: ");
    for (int i = 0; i < n; i++) {
        scanf("%d", &houses[i]);
    }

    find_lakeview_houses(houses, n);

    return 0;
}

```