[解题报告]【第16题】给定 n,打印一个直角边为 n 的等边直角三角形
目录
零、写在前面
一、主要知识点
1.打印指定的形状的边界判定
2.信号量
二、课后习题
1115. 交替打印FooBar
写在最后
零、写在前面
这个系列不经常更新,今天这个题目因为英雄哥玩超纲课后题0.0,我们一起看一看,主要知识点在
【第16题】给定 n,打印一个直角边为 n 的等边直角三角形https://blog.csdn.net/WhereIsHeroFrom/article/details/118272189https://blog.csdn.net/WhereIsHeroFrom/article/details/118272189
一、主要知识点
1.打印指定的形状的边界判定
#include<stdio.h> int main() {int n, i, j;while(scanf("%d", &n) != EOF) {for(i = 1; i <= n; ++i) { // 打印指定行数for(j = 1; j <= i; ++j) // 打印数量与行数相同printf("*"); // 打印字符printf("\n"); // 换行}}return 0; }
2.信号量
首先我们了解下进程互斥需要遵循的四个原则。
1.空闲让进 2.忙则等待 3.有限等待 4.让权等待
其中空闲让进、忙则等待保证了进程的互斥访问。有限等待保证了程序的可执行性质。
让权等待指的是在等待的时候主动休眠放弃cpu的使用权力。
而最常用保证上面的这些的一个机制就是信号量,c语言里面有几个常用的函数帮助我们来实现这些操作。
sem_t bar;//创建信号量变量sem_init(&(obj->foo),0,1);//初始化 其中第一个参数为信号量地址 第二个是共享范围 0表示在所有进程共享 第三个是初始值 一开始拥有的个数sem_wait(&(obj->foo)); //申请信号量 如果能申请到 就减小信号量的个数 往下执行 否则主动睡眠sem_post(&(obj->bar)); //释放信号量,给相应的信号量+1,并唤醒相应的进程
二、课后习题
1115. 交替打印FooBar
1115. 交替打印FooBarhttps://leetcode-cn.com/problems/print-foobar-alternately/
题目描述
两个不同的线程将会共用一个 FooBar 实例。其中一个线程将会调用 foo() 方法,另一个线程将会调用 bar() 方法。
请设计修改程序,以确保 "foobar" 被输出 n 次。
思路
明显的进程同步问题,也就是foo执行一次 far执行一次。一开始就写了一个不遵循让权等待的简单同步模型,你们应该可以看懂-.-
typedef struct {int n;int x; //同步用变量 } FooBar;FooBar* fooBarCreate(int n) {FooBar* obj = (FooBar*) malloc(sizeof(FooBar));obj->n = n;obj->x = 0;//初始化return obj; }void foo(FooBar* obj) {for (int i = 0; i < obj->n; i++) {while(obj->x); //等待x为0// printFoo() outputs "foo". Do not change or remove this line.printFoo();obj->x=1; /将x设置为1} }void bar(FooBar* obj) {for (int i = 0; i < obj->n; i++) {while(!obj->x); //等待x为1// printBar() outputs "bar". Do not change or remove this line.printBar();obj->x=0; //将x设置为0} }void fooBarFree(FooBar* obj) {free(obj); }
结果
超时!没错 肯定超时 毕竟一直卡在while里
思路2
利用上面说到的给的信号量。
typedef struct {int n;sem_t foo;//两个信号量sem_t bar;
} FooBar;FooBar* fooBarCreate(int n) {FooBar* obj = (FooBar*) malloc(sizeof(FooBar));obj->n = n;sem_init(&(obj->foo),0,1);//foo先执行所以给1sem_init(&(obj->bar),0,0);return obj;
}void foo(FooBar* obj) {for (int i = 0; i < obj->n; i++) {sem_wait(&(obj->foo));//请求foo// printFoo() outputs "foo". Do not change or remove this line.printFoo();sem_post(&(obj->bar));//释放bar}
}void bar(FooBar* obj) {for (int i = 0; i < obj->n; i++) {sem_wait(&(obj->bar));//请求bar// printBar() outputs "bar". Do not change or remove this line.printBar();sem_post(&(obj->foo));//释放foo}
}void fooBarFree(FooBar* obj) {sem_destroy(&(obj->bar)); sem_destroy(&(obj->foo));free(obj);
}
写在最后
我还能肝,肝死。。。。大家要加油,无论你们希望成为什么样的人,都需要不焦虑的一步一步靠近它!
[解题报告]【第16题】给定 n,打印一个直角边为 n 的等边直角三角形相关推荐
- 攻防世界XCTF-WEB入门12题解题报告
WEB入门题比较适合信息安全专业大一学生,难度低上手快,套路基本都一样 需要掌握: 基本的PHP.Python.JS语法 基本的代理BurpSuite使用 基本的HTTP请求交互过程 基本的安全知识( ...
- 2019组队赛第二场(ACM International Collegiate Programming Contest, Arabella Collegiate 解题报告 Apare_xzc
2019组队赛第二场(ACM International Collegiate Programming Contest, Arabella Collegiate 解题报告 by xzc,zx,lj 先 ...
- SHU 第十届程序设计联赛(夏季赛) 解题报告
Problem A: 一日三餐开销 水题,基本上都过了,直接贴代码: 1 #include <iostream> 2 #include <cstdio> 3 using nam ...
- P5488 差分与前缀和 解题报告
P5488 差分与前缀和 解题报告 link 题目大意 给定一个长度为 n n n 的序列 a i a_i ai ,求其 k k k 阶差分或前缀和.对 1004535809 取模. 1 ≤ n ≤ ...
- 2014百度之星初赛第一轮解题报告:information
Information 时间限制: 1s 内存限制: 65536K 问题描述 军情紧急,我们需要立刻开发出一个程序去处理前线侦察兵发回的情报,并做出相应的分析.现在由你负责其中的一个子模块,你需要根据 ...
- 糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) Apare_xzc
糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) xzc 2019/4/5 试题 I: 糖果 时间限制: 1.0s 内存限制: 256.0MB 本题总分:25分 [问题描述] ...
- 【解题报告】博弈专场 (CF 2000~2200)前五题
[解题报告]博弈专场 (CF 2000+)前五题 A:Fox and Card Game | CF388C 题意 思路 代码 B:Berzerk | CF786A 题意 思路 代码 C:Ithea P ...
- 无聊的活动/缘生意转(2018 Nova OJ新年欢乐赛B题)解题报告
题目2(下面的太抓 我重新写了个背景 其他都一样) 无聊的活动 JLZ老师不情愿的参加了古风社一年一度的活动,他实在不觉得一群学生跳舞有什么好看,更不明白坐在身后的学生为什么这么兴奋(看小姐姐),于是 ...
- 攻防世界XCTF-MISC入门12题解题报告
MISC属于CTF中的脑洞题,简直就是信息安全界的脑筋急转弯.你说它渣,它也有亮点,不好评说.这块最亮眼的入门题就属隐写术,出题人骚的狠.但是我感觉未来其中一个重点,就是大数据安全,从海量流量中捕获恶 ...
最新文章
- 网站DDOS***防护实战老男孩经验心得分享
- 数据库PHP绘制柱形图,php使用Jpgraph绘制柱形图的方法
- BAT会看上哪样的中小公司程序员?
- latex 引用_VS Code + LaTex + Zotero 写作毕业论文
- AJAX框架眼镜店美瞳,PS完成对照片中人物的美瞳效果
- 大龄程序员怎样渡过中年危机?(转)
- [js] js中的undefined和 ReferenceError: xxx is not defined 有什么区别?
- 【Daily Scrum】12-08
- 编程随想 关系图_IT什么岗位比较好找工作?一张金字塔图就能明白
- Oracle 10g 高级安装图文教程(一)
- 为什么采用4~20mA的电流来传输模拟量?(转)
- centos6.9负载均衡方案完整配置(lvs+keepalived+pxc+nfs+业务系统)
- Navicat Premium 12快捷键
- Ubuntu配置机顶盒踩坑记录(Airplay/DLNA/UPuP/Miracast)
- 做vue项目时报错,Error: spawnSync C:\Program Files\Java\jre1.8.0_201 ENOENT的解决办法!!!简单粗暴!!!
- 关于STM32、温度传感器论文的参考文献
- Android-组件化开发
- 网管实战(9):网关地址的设置
- 共享单车公司每年花上亿元赎车
- ClickHouce 常用字符串函数
热门文章
- 一文读懂“什么是Web 1.0,Web 2.0,Web 3.0?”
- javafx 教程_新的JMetro JavaFX 11兼容版本
- Eclipse插件Target Management (RSE)
- Java版本微信授权登录(测试版)
- 浙大翁恺pat练习题_PAT|中国大学MOOC-浙江大学翁恺-C语言程序设计习题集(更新中)...
- [ Arduino+Python ] 做一个串口屏,显示CPU使用率
- commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(三)-中英对照文档及源码赏析
- word批量删除单选、多选题的答案
- Windows64Adobe2019/2019全家桶
- 【已解决】Mysql 存储 emoji 表情报错 Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F