利用easyx和C++实现双指针接雨水问题要有图示
时间: 2024-02-01 20:12:16 浏览: 82
使用 C++、EasyX 绘图库编写的 FC-Tank小游戏.zip
好的,下面是利用EasyX和C++实现双指针接雨水问题的示意图和代码:
![双指针接雨水](https://img-blog.csdnimg.cn/2021070915161566.PNG)
```c++
#include <graphics.h>
#include <conio.h>
#include <iostream>
using namespace std;
#define MAXLEN 10 //柱子的最大高度
#define GAP 50 //柱子间的间隔
#define WIDTH 50 //柱子的宽度
#define WINW 800 //窗口宽度
#define WINH 600 //窗口高度
int h[MAXLEN] = {1, 3, 6, 4, 2, 3, 1, 5, 2, 4}; //柱子高度数组
int main()
{
initgraph(WINW, WINH); //初始化绘图窗口
//绘制柱子
for (int i = 0; i < MAXLEN; i++) {
setfillcolor(YELLOW); //设置颜色
solidrectangle(i * GAP + GAP / 2 - WIDTH / 2, WINH - h[i] * GAP, i * GAP + GAP / 2 + WIDTH / 2, WINH); //绘制柱子
}
//计算总雨水量
int l = 0, r = MAXLEN - 1; //左右指针
int ml = h[l], mr = h[r]; //左右最高高度
int ans = 0; //雨水量
while (l < r) {
if (h[l] < h[r]) { //如果左边的柱子比右边低
l++; //左指针右移
ml = max(ml, h[l]); //更新左最高高度
ans += ml - h[l]; //计算雨水量
}
else { //否则右边的柱子比左边低
r--; //右指针左移
mr = max(mr, h[r]); //更新右最高高度
ans += mr - h[r]; //计算雨水量
}
}
//输出总雨水量
settextcolor(RED); //设置颜色
setbkmode(TRANSPARENT); //设置背景透明
char str[100];
sprintf(str, "总雨水量:%d", ans); //格式化字符串
outtextxy(WINW / 2 - 50, 50, str); //输出字符串
_getch(); //等待按键
closegraph(); //关闭绘图窗口
return 0;
}
```
阅读全文