按题中的要求,写一个代码,要有输入功能,输入房子高度,可以输出哪些是海景房。
#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;
}
```