像这种像山那样思考题目含义该如何给孩子讲解?还没开始学除法

用户等级:初中三年级
注册时间:
在线时长:62 小时
<em id="authorposton17-5-12 16:37
如果孩子不想上学、不爱学习,该怎么办呢?
不要说伤害学习积极性的5句话
写作业磨蹭,今天晚上不许玩!
我常常听到家长限制孩子玩的时间,但是有没有家长限制孩子学习的时间呢? 支招:限制学习时间有时更高效。
看看人家孩子,又考了第一!
当父母总比较成绩给孩子造成压力时,你口中的榜样,常常变成孩子仇视的对象。
支招:名次不是输赢。
是你自己要学的,怎么能半途而废!
很多家长明白学习的目的也支持孩子的兴趣,但是当我们很高兴孩子有了喜欢的事情,还存在一种情况,那就是三分钟热度,有了热情,很快熄灭了怎么办?
支招:让孩子感受到学习的轻松和快乐
你就好好学习,其他不用管!
很多家长让孩子只关注学习,反而阻碍了孩子真正的学习能力。
支招:学习不是只在课本上。
别问“为什么”,别胡思乱想!
在孩子小的时候,会问我们无数个为什么,其实这正是孩子学习的重要方法支招:“为什么”是点燃学习的火种。
用户等级:初中三年级
注册时间:
在线时长:62 小时
<em id="authorposton17-5-12 16:37
了解这8个心理学规律
&&小考都挺好,大考就砸锅(詹森效应 )
曾经有一名叫詹森的运动员,平时训练有素,实力雄厚,但一到赛场就会失利,自己和他人都很失望。由此人们把这种平时表现良好,因缺乏应有的心理素质而导致正式比赛失败的现象称为“詹森效应”。
在现实生活中也有不少类似现象,平时名列前茅的学生一到大考,就发挥失常,表现出紧张、慌乱,甚至记忆骤退,脑海里一片空白。其主要原因是学生对结果期望值过高,想要成功,又怕失败,患得患失,压力过大。结果造成大脑皮层兴奋与抑制失衡,植物神经功能紊乱,各种症状就随之而生。
启示:要教会孩子注重过程,淡化结果。学会关注过程中的付出与收获,而不仅仅是看结果如何。
给孩子留点“空白”(超限效应)
马克·吐温听牧师演讲时,最初感觉牧师讲得好,打算捐款;10分钟后,牧师还没讲完,他很不耐烦,决定只捐些零钱;又过了10分钟,牧师还没讲完,他决定不捐了。在牧师最终结束演讲开始募捐时,过于气愤的马克.吐温不仅分文未捐,还从盘子里偷了2元钱。这种由于刺激过多、作用时间过久,而引起逆反心理的现象,就是“超限效应”。
启示:孩子考试没考好,有的父母只要一看到孩子看电视或者玩游戏就会跟孩子提起没考好的事情,让孩子感觉“又来了”,使孩子从最初的内疚不安到后来的不耐烦最后反感讨厌。父母对孩子的批评不要超过限度,犯一次错,只批评一次。这样,孩子才不会觉得同样的错误被“揪住不放”,厌烦、逆反的心理也会随之降低。
怎样才能激发学习兴趣(德西效应)
当一个人做一件事很开心时,提供奖励反而会减少这项活动对他的内在吸引力,这就是所谓的“德西效应”。
心理学家爱德华·德西曾做过一次实验,他随机挑选一些学生解答智力难题。实验的第一阶段,所有学生都没有奖励;第二阶段,奖励组的学生完成一道难题就会得到1美元奖励,无奖励组的学生仍像原来那样解题;第三阶段,让学生们自主学习,研究员通过观察学生在业余时间是否继续做题,来判断学生对解题的兴趣。结果发现,被奖励的学生对解题的兴趣衰减地快,而未被奖励的学生愿意花更多的时间去解题。
启示:不要随便奖励孩子,并不是所有的奖励都会让孩子更愿意做一件事,奖励也会浇灭他们对一件事的兴趣。
用户等级:初中三年级
注册时间:
在线时长:62 小时
<em id="authorposton17-5-12 16:37
谁都喜欢“够得着”的目标(登门坎效应)
“登门槛效应”又称“得寸进尺效应”,是指一个人一旦接受了他人一个微不足道的要求,这个人为了给他人留下前后一致的印象,就有可能接受更大的要求。
1966年美国心理学家曾做过一个实验,实验者到两个居民区劝人在房前竖一块写有“小心驾驶”的大标语牌。在第一个居民区直接提出这个要求,结果遭到很多居民的拒绝,接受的仅为被要求者的17%。在第二个居民区,先请居民在一份赞成安全行驶的请愿书上签字,这是很容易做到的小小要求,几乎所有的被要求者都照办了。几周后再向他们提出竖牌的要求,结果接受者竟占被要求者的55%。
启示:在帮助孩子养成好习惯时,我们不要在最初就给孩子设立一个难以完成的大目标,而要根据孩子的能力制定他们“够得着”的目标。比如,希望孩子养成快速写作业的习惯,我们可以先让孩子从自我分析开始;第二个阶段在学校完成三项作业;第三个阶段九点以前完成等等,根据自身情况制订一个时间段(一周、半月或一个月)养成一个好习惯的目标。
面对压力怎么办(齐加尼克效应 )
因压力导致心理上的紧张状态,被称为“齐加尼克效应”。
法国心理学家齐加尼克曾作过一次实验:他将受试者分为两组,让他们去完成20项工作。期间,齐加尼克对一组受试者进行干预,使他们无法完成任务,而让另一组顺利完成任务。结果发现:虽然所有受试者接受任务时都显出紧张状态,但顺利完成任务者,紧张状态随之消失;而未能完成任务者,紧张状态持续存在,他们的思绪总是被那些未能完成的工作所困扰,心理上的紧张压力难以消失。
启示:孩子完不成作业或完不成学校的任务时,虽然表现得满不在乎或者逃避,其实他们的内心很焦虑。在这种情况下,指责只会让他们更有压力,更加逃避。和孩子一起,帮助他们完成任务,才是解决问题最好的办法。
被关注的力量(霍桑效应)
“霍桑效应”是指当人们意识到自己被关注或观察时,会刻意改变自己某些言语和行为的效应。
1924年11月,哈佛大学的心理专家在霍桑工厂做了一项研究,他们选定了六名女工作为观察对象,试图通过改善照明、工资、休息时间、午餐等因素,找到提高员工效率的方法。历时九年的实验和研究,学者们终于发现在霍桑试验中,当这六名女工被抽出来成为一组的时候,她们就意识到自己是这些专家一直关心的对象,这种受注意的感觉使得她们加倍努力工作,以证明自己是优秀的,是值得被关注的。
启示:给予孩子一些权力,比如:学习任务的规划、分担家务、零花钱的管理等等,让孩子感受到平等和尊重,自我能力的认可,这份关注能够激发孩子们前进的动力,证明自己是值得被关注的。
不同的视角不同的感受(晕轮效应)
“晕轮效应”又称“光环效应”,是指当我们对一个人形成好或坏的印象后,就会依据这些印象来推论他其他方面的特征。
美国心理学家凯利在麻省理工学院的两个班级做了一个试验。上课前,实验者向学生宣布,临时请一位研究生来代课。向一个班的学生介绍他时,实验者用热情、勤奋、务实、果断等词,向另一个班的学生介绍他时除了将“热情”换成了“冷漠”之外,其余各项都相同。下课之后,前一班的学生与研究生一见如故,亲密攀谈;另一个班的学生对他却敬而远之,冷谈回避。一词之别,竟会影响到整体的印象。学生会戴着这种有色镜去观察代课者,而这位研究生就被罩上了不同色彩的晕轮。
启示:孩子对于老师和同学的态度会影响到他们在学校的积极性,所以与孩子交流时,不要过早地对他的老师和同学做出评价,要鼓励孩子尽可能多地与他们交流,更加全面地看身边的人,不要因为某句话或某个举动就认为这个人一定是什么样的。
抽刀断水水更流(禁果效应)
禁果效应也叫做“亚当与夏娃效应”,越是禁止的东西,越想得到。这与人们的好奇心和逆反心理有关,这种由于单方面的禁止和掩饰而造成的逆反现象就是“禁果效应”。
启示:很多父母担心自己的孩子早熟或因为早恋而影响学习,于是就控制孩子上网或与异性的接触。但这样的阻止反而让孩子更加好奇网上的内容和外面的世界,他们为了满足自己的好奇心可能还会骗父母,父母就会失去正面引导孩子的机会。孩子迟早会走入外面的世界,与其不让孩子接触,不如与他们分享利弊,教会他们自我保护、自己判断的能力。
用户等级:初中三年级
注册时间:
在线时长:62 小时
<em id="authorposton17-5-12 16:38
帮孩子成为学习的主人,把自己解放出来
在孩子上学后,很多家长都开始守着孩子做作业,不厌其烦地,一道题一道题地耐心讲解,有时甚至全家总动员,为的就是辅导孩子的作业。
两年下来,孩子的学习成绩可能一直领先,但是独立学习能力却没有得到提高。
上了三、四年级,语文的阅读分析、作文加上来了,数学题目也更难了,有些家长辅导力逐渐力不从心了。
孩子失去了家长的支撑,学习马上就滑落下来了。家长着急,孩子失落。
孩子自主能力不是与生俱来的,是通过学习逐渐形成的。而且越小开始训练,效果越好。
潜移默化培养孩子的学习兴趣,从“陪读”中抽身,培养孩子的自主学习的能力和自立精神。
培养孩子广泛的兴趣
大家都知道,广泛的兴趣,更能够积累孩子多方面的感性认识,丰富知识量,拓宽思路,面对问题时能够多角度的去思考。没有兴趣的学习是一种痛苦的行为,学习兴趣与学习积极性、主动性相辅相成,那怎样培养孩子的广泛的兴趣呢?
(1)拓展孩子的视野,经常带孩子走出家门,外出旅游或参加社会活动是很好的学习途径。
(2)从游戏中开发孩子的兴趣。爱玩是孩子的天性,一些益智类、竞争类游戏能很好的激发孩子对某一事物的兴趣。
(3)让孩子多读书。多给孩子买一些有益的适合孩子特点的书,像是趣味科学、脑筋急转弯、自然奇观等,最好是图文并茂,孩子容易感兴趣。也可以和孩子一起选择他喜爱的书籍。
给孩子足够的鼓励和赞扬,增强他的自信心
自信心是一个人成功与否的关键因素。而自信心更多时候是来自家庭、父母的鼓励。
(1)适时、及时的夸赞。受到自己信赖的人(爸爸妈妈、老师)的表扬,会增添孩子的自信心,做事更加认真努力。
(2)充分尊重、信任孩子。与孩子有关的一切事宜都让孩子拥有知情权,尊重孩子的意见,而不是强制性的让孩子被动的接受“爱”心安排。
多给予孩子积极有益的暗示
父母直接的教育,孩子可能不愿接受,但是一些积极的暗示作用效果确实很明显的。如表情暗示(眼神),榜样暗示(以身示范),动作暗示(大拇指),语言暗示等等…
在适当的时候真诚的给予孩子一些积极暗示,一定会收到意料想不到的惊喜。
让孩子体验学习的快乐
经常的成功会给孩子带来快乐,通过学习取得好成绩,受到老师、父母的称赞对孩子来说是件很快乐的事情。所以,在孩子取得一定的成绩的时候,及时给孩子一些认可,对培养孩子的学习兴趣很有帮助!
用户等级:初中二年级
注册时间:
在线时长:135 小时
金币:2235
<em id="authorposton17-5-12 17:03
学习了学习了
用户等级:初中二年级
注册时间:
在线时长:0 小时
<em id="authorposton17-5-15 07:16
路过挣元宝
Powered by怎么教二年级的孩子做除法应用题_百度宝宝知道《算法竞赛入门经典》读书笔记(4)1-3章习题题解 - 知乎专栏
{"debug":false,"apiRoot":"","paySDK":"/api/js","wechatConfigAPI":"/api/wechat/jssdkconfig","name":"production","instance":"column","tokens":{"X-XSRF-TOKEN":null,"X-UDID":null,"Authorization":"oauth c3cef7c66aa9e6a1e3160e20"}}
{"database":{"Post":{"":{"contributes":[{"sourceColumn":{"lastUpdated":,"description":"","permission":"COLUMN_PUBLIC","memberId":2092734,"contributePermission":"COLUMN_PUBLIC","translatedCommentPermission":"all","canManage":true,"intro":"","urlToken":"bananacat","id":29347,"imagePath":"v2-4d055e881d492d7ee6ba51c32d1d2382.jpg","slug":"bananacat","applyReason":"0","name":"Banana's code block","title":"Banana's code block","url":"/bananacat","commentPermission":"COLUMN_ALL_CAN_COMMENT","canPost":true,"created":,"state":"COLUMN_NORMAL","followers":53,"avatar":{"id":"v2-4d055e881d492d7ee6ba51c32d1d2382","template":"/{id}_{size}.jpg"},"activateAuthorRequested":false,"following":false,"imageUrl":"/v2-4d055e881d492d7ee6ba51c32d1d2382_l.jpg","articlesCount":9},"state":"accepted","targetPost":{"titleImage":"/v2-ba3e719cac5_r.jpg","lastUpdated":,"imagePath":"v2-ba3e719cac5.jpg","permission":"ARTICLE_PUBLIC","topics":[,25257],"summary":"FYI:文中内容收集整理自《算法竞赛入门经典(第2版)》,版权归原书所有。希望对算法和ACM有兴趣的同学能够购买正版书,因为原书的讲解更加细致,更适合算法竞赛的培训。本笔记配合原书食用更佳。Special Note:Lian喵说她投靠Python不用Java了,心疼我上一…","copyPermission":"ARTICLE_COPYABLE","translatedCommentPermission":"all","likes":0,"origAuthorId":0,"publishedTime":"T10:21:35+08:00","sourceUrl":"","urlToken":,"id":2391125,"withContent":false,"slug":,"bigTitleImage":false,"title":"《算法竞赛入门经典》读书笔记(4)1-3章习题题解","url":"/p/","commentPermission":"ARTICLE_ALL_CAN_COMMENT","snapshotUrl":"","created":,"comments":0,"columnId":29347,"content":"","parentId":0,"state":"ARTICLE_PUBLISHED","imageUrl":"/v2-ba3e719cac5_r.jpg","author":{"bio":"绳命是如此的井菜!","isFollowing":false,"hash":"5ced6cb6087542ebb4084","uid":36,"isOrg":false,"slug":"chen-wei-jia-86","isFollowed":false,"description":"欢迎关注我的专栏/bananacat","name":"陈伟嘉","profileUrl":"/people/chen-wei-jia-86","avatar":{"id":"d9cf5c6a0f42ac0c2a1de","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},"memberId":2092734,"excerptTitle":"","voteType":"ARTICLE_VOTE_CLEAR"},"id":566945}],"title":"《算法竞赛入门经典》读书笔记(4)1-3章习题题解","author":"chen-wei-jia-86","content":"FYI:文中内容收集整理自《算法竞赛入门经典(第2版)》,版权归原书所有。希望对算法和ACM有兴趣的同学能够购买正版书,因为原书的讲解更加细致,更适合算法竞赛的培训。本笔记配合原书食用更佳。Special Note:Lian喵说她投靠Python不用Java了,心疼我上一期一条一条语句查给她,难过的抱住胖胖的自己,手动微笑习题1-1 平均数(average)输入3个整数,输出它们的平均值,保留3位小数。Note输入的是3个整数,但平均值是浮点数保留3位小数,所以初始化输入的数字应该是int型,平均值则应该是double型;在计算平均值时,一定要先将三个数字之和进行强制类型转换,转换为double型。虽然这题用不到,但是还是标注一下:C语言中,a除以b的余数符号与a相同//ex1-1\n#include &stdio.h&\nint main()\n{\n
int a,b,c;\n
double ave;\n
scanf(\"%d%d%d\",&a,&b,&c);\n
ave=(double)(a+b+c)/3;\n
printf(\"%.3f\\n\",ave);\n
return 0;\n}\n运行结果示例:33 26 990\n349.667\nProgram ended with exit code: 0\n习题1-2 温度(temperature)输入华氏温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。//
ex1-2.c\n\n\n #include &stdio.h&\nint main()\n{\n
int f;//虽然没说输入的华氏温度一定是整数,但本题姑且这么假设\n
double c;\n
scanf(\"%d\",&f);\n
c=5*((double)f-32)/9;\n
printf(\"%.3f\\n\",c);\n}\nNote:和上一题一样,在计算c的时候要对f进行强制类型转换;这题网上搜到的答案是错的...趁这个机会说一下哦,只要是贴出来的代码都是经过我自己调试,并且用数据测试的,尽管如此,可能依然会有一些问题,欢迎关注专栏的朋友们在下方评论打脸,或者贴出更好的解法!感激不尽!运行结果示例:75\n23.889\nProgram ended with exit code: 0\n120\n48.889\nProgram ended with exit code: 0\nSpecial Note:房东小姐姐常年把家里的暖气开到75华氏度,然后半夜又大吼着“I am melting!!!”冲出来把暖气给关掉...120华氏度是我去的学校游泳馆桑拿房的温度,诶?原来转换成摄氏度后比我想象的低很多嘛...习题1-3 连续和(sum)输入正整数n,输出1+2+…+n的值。提示:目标是解决问题,而不是练习编程。Note:题目里说目标是解决问题,别想太多,我们还是按照最naive的方法来写这题,记得先把sum初始化为0//
ex1-3.c\n\n#include &stdio.h&\nint main()\n{\n
int sum=0;\n
scanf(\"%d\",&n);\n
for(int i=1;i&=n;i++)\n
printf(\"%d\\n\",sum);//也可以不用循环直接printf(\"%d\\n\",(n*(1+n))/2);\n}\nSpecial Note所谓的不naive得方法就是使用求和公式,考虑到Lian喵记性不好,我给注释在程序里了,不要辜负了高斯辛勤劳动的成果100\n5050\nProgram ended with exit code: 0\n习题1-4 正弦和余弦(sin和cos)输入正整数n(n<360),输出n度的正弦、余弦函数值。提示:使用数学函数。Note:C语言中的正弦余弦函数使用方法:sin:正弦函数\n函数原型:double sin(double x);\n头文件:#include&math.h&\n是否是标准函数:是\n函数功能:求x的正弦值,这里,x为弧度。\n返回值:计算结果的双精度值。\n\n\ncos :余弦函数\n函数原型:double cos(double x);\n头文件:#include&math.h&\n是否是标准函数:是\n函数功能:求x的余弦值,这里,x为弧度。\n返回值:计算结果的双精度值。\n注意一点:这里的x是弧度!弧度!弧度!不是角度,弧度和角度的转换公式为:弧度=关于,我使用的是最简单的方法,直接将圆周率大致取为3.1415,但是这样会导致得到的结果不够精确,这里再介绍两种方法:一种是#define pi 4.0*atan(1.0)\n这是圆周率的数学定义,不做过多解释另一种是直接使用头文件math.h中定义好的数值tc库math.h中有定义\n\n/* Constants rounded for 21 decimals. */\n#define M_PI
3.\n可以直接在程序中使用M_PI,超级方便有木有!Special Note:Python中计算正弦和余弦则要方便快捷得多:sin() 返回的x弧度的正弦值。\n\n语法:\nimport math\nmath.sin(x)\n\n参数:\nx -- 一个数值。\n\n返回值:\n返回的x弧度的正弦值,数值在 -1 到 1 之间。\n\n实例:\nprint \"sin(3) : \",
math.sin(3)\n不服不行,手动微笑下面是代码://
ex1-4.c\n\n#include &stdio.h&\n#include &math.h&\n#define pi 3.1415\nint main()\n{\n
double ncos,nsin;\n
scanf(\"%d\",&n);\n
ncos=cos((pi*n)/180);//这里也可写作 ncos=cos((M_PI*n)/180);\n
nsin=sin((pi*n)/180);//同上\n
printf(\"%f\\n%f\\n\",nsin,ncos);\n
return 0;\n}\n运行结果示例:30\n0..866025\nProgram ended with exit code: 0\n习题1-5 打折 (discount)一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金额(单位:元),保留两位小数。Note这题没什么槽点,按照题意编写就可以了,注意sum的数字类型//
ex1-5.c\n\n#include &stdio.h&\nint main()\n{\n
double sum=0;\n
scanf(\"%d\",&n);\n
sum=95*n;\n
if(sum&=300)\n
sum=0.85*sum;\n
printf(\"%.2f\\n\",sum);\n}\n运行结果示例:(假如某喵每年买一件,今年应该买了22件了(诶确定是22嘛?))22\n1776.50\nProgram ended with exit code: 0\n都是钱呀!习题1-6 三角形(triangle)输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3个边长。如果可以,则输出yes,如果不能,则输出no。如果根本无法构成三角形,则输出not a triangle。Note:一种思路是,先根据任意两边之和大于第三边判断是不是三角形,再根据勾股定理判断是不是直角三角形;给出了另一种思路,先找出最大边,然后同时进行是否为三角形/直角三角形的判断//
ex1-6.c\n//方法一:简单粗暴,温柔可靠\n\n#include &stdio.h&\nint main()\n{\n
int a,b,c;\n
scanf(\"%d%d%d\",&a,&b,&c);\n
if(a+b&c && a+c&b && b+c&a)\n
if(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)\n
printf(\"yes\\n\");\n
else printf(\"no\\n\");\n
else printf(\"not a triangle\\n\");\n
return 0;\n}\n//方法二:更加简洁高效,来源见Note\n#include&iostream&\n#include&cstdio&\nusing namespace std;\n\nint main()\n{\n\tint a,b,c;\n\twhile(scanf(\"%d %d %d\",&a,&b,&c))\n\t{\n\t\tif(a&b) swap(a,b);\n\t\tif(a&c) swap(a,c);\n\t\tif(b&c) swap(b,c);\n\t\t\n\t\tif(a*a+b*b == c*c)\n\t\t{\n\t\t\tprintf(\"yes\\n\");\n\t\t}\n\t\telse if( (a+b)&c )\n\t\t{\n\t\t\tprintf(\"no\\n\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tprintf(\"not a triangle\\n\");\n\t\t}\n\t}\n}\n运行结果示例:3 4 5\nyes\nProgram ended with exit code: 0\n3 4 6\nno\nProgram ended with exit code: 0\n1 2 9\nnot a triangle\nProgram ended with exit code: 0\n习题1-7 年份(year)输入年份,判断是否为闰年。如果是,则输出yes,否则输出no。提示:简单地判断除以4的余数是不够的。Note:烂大街的题目了,估计是所有C语言的学习者在输出“hello world”之后解决的第一个有成就感的题目 闰年的定义是:西元年分除以400可整除,为闰年。西元年分除以4可整除但除以100不可整除,为闰年。//
ex1-7.c\n\n#include &stdio.h&\nint main()\n{\n
int year;\n
scanf(\"%d\",&year);\n
if(year%400==0)\n
printf(\"yes\\n\");\n
else if(year%4==0 && year%100!=0)\n
printf(\"yes\\n\");\n
else printf(\"no\\n\");\n
return 0;\n}\n运行结果示例:1994\nno\nProgram ended with exit code: 0\n2000\nyes\nProgram ended with exit code: 0\n2100\nno\nProgram ended with exit code: 0\n习题2-1 水仙花数(daffodil)输出100~999中的所有水仙花数。若3位数ABC满足ABC=,则称其为水仙花数。例如153=,所以153是水仙花数。Note:依次检查数字,分离出它的个位、十位和百位,然后检查是否符合水仙花数的定义即可//
ex2-1.c\n#include &stdio.h&\nint main()\n{\n
int a,b,c;\n
for(int i=100;i&=999;i++)\n
c=i%10;//个位\n
b=i/10%10;//十位\n
a=i/100%10;//百位\n
if(a*a*a+b*b*b+c*c*c==i)\n
printf(\"%d\\n\",i);\n
return 0;\n}\n运行结果:153\n370\n371\n407\nProgram ended with exit code: 0\n习题2-2 韩信点兵(hanxin)相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入包含多组数据,每组数据包含3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100。输入到文件结束为止。样例输入:\n2 1 6\n2 1 3\n样例输出:\nCase 1: 41\nCase 2: No answer\nNote:对于每一组输入,依次检查10~100间每个数对3,5,7的余数,直到找到一组能够匹配a,b,c的数据。有些答案真的害人,真的,根本不对,这题要求连续输入多组数据,而且每一次循环之前必须要重置n,因此要将n定义在循环体内部不过我真的有一个疑问,存不存在同一组a,b,c对应多个可能的人数的情况?在10~100之间可能不存在这种情况,但是如果范围扩大,程序还需要做出相应的修改。//
ex2-2.c\n\n\n#include &stdio.h&\nint main()\n{\n
int a,b,c,kase=0;//kase记录第几组数据\n
while(scanf(\"%d%d%d\",&a,&b,&c)!=EOF)\n
int n=10;\n
while(n&=100)\n
if(n%3==a && n%5==b && n%7==c)\n
printf(\"Case%d:%d\\n\",++kase,n);\n
break;//找到n后立即跳出循环,避免n继续增加\n
else n++;\n
//printf(\"%d\\n\",n);\n
if(n&100)\n
printf(\"Case%d:No answer\\n\",++kase);//n&100表示没有找到符合要求的数字\n
return 0;\n}\n习题2-3 倒三角形(triangle)输入正整数n≤20,输出一个n层的倒三角形。例如,n=5时输出如下:#########\n #######\n
#\nNote:注意用户输入的是层数,还需要计算每一层应该有的星号数目;每一行只需要输出前面部分的空格后即可换行观察规律可以很容易看出:每往下一行,星号数目-1,空格数目+1//
ex2-3.c\n\n#include &stdio.h&\nint main()\n{\n
int level,n;\n
scanf(\"%d\",&level);\n
n=1+(level-1)*2;\n
for(int i=n;i&0;i=i-2)\n
for(int b=0;b&(n-i)/2;b++)\n
printf(\" \");\n
for(int j=1;j&=i;j++)\n
printf(\"#\");\n
printf(\"\\n\");\n
return 0;\n}\n运行结果示例:8\n###############\n #############\n
###########\n
#########\n
#\nProgram ended with exit code: 0\n习题2-4 子序列的和(subsequence)输入两个正整数n<m<,输出 ,保留5位小数。输入包含多组数据,结束标记为n=m=0。提示:本题有陷阱。Note:问题来了,本题有陷阱,陷阱在哪儿?题目明确了n是比m小的,所以不存在错误输入的情况。再考虑一下溢出的可能,m和n都被定义为int型的常量,所以存在相乘会溢出的可能,看来这就是所谓的陷阱了。尝试将1/(n*n)转换为1/n/n的形式,可以避免溢出//
ex2-4.c\n\n#include &stdio.h&\nint main()\n{\n
int m,n;\n
double sum=0;\n
scanf(\"%d%d\",&n,&m);\n
for(int i=n;i&=m;i++)\n
sum+=1/(double)i/(double)i;\n
printf(\"%.5f\\n\",sum);\n}\n运行结果示例:2 7\n0.51180\nProgram ended with exit code: 0\n\n0.00001\nProgram ended with exit code: 0\n习题2-5 分数化小数(decimal)输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b≤ ,c≤100。输入包含多组数据,结束标记为a=b=c=0。样例输入:\n1 6 4\n0 0 0\n样例输出:\nCase 1: 0.1667\nNote:这是一个很有意思的问题,我们都知道输出语句中,如果保留一位小数,就是%.1f,依次类推,但是如何用变量控制输出的小数位数呢?这里要介绍一个新技能:对于m.n的格式还可以用如下方法表示char ch[20];\nprintf(\"%*.*s\\n\",m,n,ch);\n前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n。这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。 再介绍一个新技能:输出格式 %n 可以将所输出字符串的长度值赋绐一个变量, 见下例:int slen;\nprintf(\"hello world%n\", &slen);\n执行后变量被赋值为11。Special Note:对于Python的输出格式控制,要比C简单得多,对于a/b保留c位小数这种事,python只需要round(a/b,c)就可以了。(好气啊,毕竟python是发明给学不会C的Lian喵用的)//
ex2-5.c\n\n#include &stdio.h&\nint main()\n{\n
int a,b,c;\n
double result;\n
scanf(\"%d%d%d\",&a,&b,&c);\n
result=(double)a/(double)b;\n
printf(\"%.*f\\n\",c,result);\n
return 0;\n}\n运行结果示例:19 94 10\n0.\nProgram ended with exit code: 0\n习题2-6 排列(permutation)用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必太动脑筋。Note:这题运行9个循环然后写一个超长的判断语句吧...太蠢了我就不写代码了习题3-1 得分(Score, ACM/ICPC Seoul 2005, UVa1585)给出一个由O和X组成的串(长度为1~80),统计得分。每个O的得分为目前连续出现的O的个数,X的得分为0。例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3。Note:把字符串存在数组中,然后依次读取,遇到O就把计数器+1,遇到X就把计数器置零//
ex3-1.c\n\n#include &stdio.h&\nint main()\n{\n
char s[90];\n
int sum=0,num=0;\n
scanf(\"%s\",s);\n
for(int i=0;s[i];i++)\n
if(s[i]=='O')\n
sum+=num;\n
else num=0;//不用考虑遇到X的情况\n
printf(\"%d\\n\",sum);\n
return 0;\n}\n运行结果示例:OOXXOXXOOO\n10\nProgram ended with exit code: 0\n习题3-2 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。例如,C6H5OH的分子量为94.108g/mol。Note:这题的关键在于如何判断元素个数为1时的情况,每读取一个元素,需要检查它后面一个字符是数字还是元素符号,为了方便阅读,我把程序写的繁琐一些,只想看运行结果的,可以将中间的printf语句给注释掉如果是数字,不可以直接写num=s[i],两者的字符类型不一样,详细见代码中的注释。//
ex3-2.c\n\n\n#include &stdio.h&\n#include &string.h&\n#include &ctype.h&\n#define maxn 1000\nconst char molecule[]=\"CHON\";//元素名称\ndouble weight[]={12.01,1.008,16.00,14.01};//元素质量\nint main()\n{\n
char s[maxn];\n
double w=0,sum=0;//w是当前元素质量,sum是总质量\n
int num;\n
scanf(\"%s\",s);\n
for(int i=0;s[i];i++)\n
if(isalpha(s[i])==1)//如果是元素\n
for(int j=0;j&4;j++)\n
if(s[i]==molecule[j])\n
w=weight[j];\n
printf(\"元素是%c\\n\",molecule[j]);\n
printf(\"重量是%f\\n\",w);\n
if(isdigit(s[i+1])==1)//检查后一个字符是不是数字,如果是数字则与前一个元素合并\n
num=(s[i+1]-'0');//切记这里的赋值方法\n
sum+=w*num;\n
printf(\"个数是%d\\n\",num);\n
printf(\"当前总重量是%f\\n\",sum);\n
else//如果不是数字,则默认前一个元素数目为1\n
printf(\"当前总重量是%f\\n\",sum);\n
printf(\"%.3f\\n\",sum);\n}\n运行结果示例:我化学很渣的。。。C6H6是苯,第二个有机物我随便写的,不知道是啥。C6H6\n元素是C\n重量是12.010000\n个数是6\n当前总重量是72.060000\n元素是H\n重量是1.008000\n个数是6\n当前总重量是78..108\nProgram ended with exit code: 0\n\nCH2OH\n元素是C\n重量是12.010000\n当前总重量是12.010000\n元素是H\n重量是1.008000\n个数是2\n当前总重量是14.026000\n元素是O\n重量是16.000000\n当前总重量是30.026000\n元素是H\n重量是1.008000\n当前总重量是31..034\nProgram ended with exit code: 0\n习题3-3 数数字(Digit Counting , ACM/ICPC Danang 2007, UVa1225)把前n(n≤10000)个整数顺次写在一起:112…数一数0~9各出现多少次(输出10个整数,分别是0,1,…,9出现的次数)。Note:一开始的想法是,先把1~10000全都写入数组,然后遍历一遍,统计0~9出现的次数,这显然很蠢。。。正确的打开方式应该是依次输入1~n,每输入一个数就统计一次,多位数要思考一下如何把各个位区分开来。//
ex3-3.c\n\n#include &stdio.h&\n#include &string.h&\n#include &ctype.h&\nint main()\n{\n
int s[10];//分别用来记录0~9的个数\n
memset(s,0,sizeof(s));\n
scanf(\"%d\",&n);\n
while(n&0)\n
double num=n;//num用于分离出n的各位数字\n
while(num&=1)\n
int count=(int)num%10;\n
s[count]+=1;\n
//printf(\"s[%d]=%d\\n\",count,s[count]);\n
num=num/10;\n
for(int i=0;i&10;i++)\n
printf(\"%d=%d\\n\",i,s[i]);\n
return 0;\n}\n运行结果示例:10\n0=1\n1=2\n2=1\n3=1\n4=1\n5=1\n6=1\n7=1\n8=1\n9=1\nProgram ended with exit code: 0\n习题3-4 周期串(Periodic Strings, UVa455)如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。输入一个长度不超过80的字符串,输出其最小周期。Note:一开始我是想保存整个数组,然后依次尝试所有周期长度的可能,后来受到的启发,周期的长度必然是数组长度的约数,因此简化了一些工作;这题的难点在于一旦找到最小的循环就要立即跳出,因此需要一个额外的判断标志。//
ex3-4.c\n\n#include &stdio.h&\n#include &string.h&\nint main()\n{\n
int l,i;//l记录输入数据的长度,i记录周期长度\n
char s[100];\n
scanf(\"%s\",s);\n
l=strlen(s);\n
for(i=1;i&=l;i++)//从小到大找到l的约数\n
continue;\n
int kase=1;//判断符\n
for(int j=1;j&l/i;j++)\n
for(int k=0;k&i;k++)\n
if(s[k]!=s[k+j*i])//检查当前周期是否符号要求\n
kase=0;//不符合要求则置判断符为0\n
if(kase==0)\n
break;//跳出当前循环\n
if(kase==0)\n
break;//跳出当前循环\n
if(kase==1)//注意这里是判断符=1,找到了符合要求的周期,立即跳出循环!\n
printf(\"%d\\n\",i);\n
return 0;\n}\n运行结果示例:ABAABBABAABBABAABBABAABB\n6\nProgram ended with exit code: 0\n3-5,3-6题略去习题3-7 DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368)输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总Hamming距离尽量小。两个等长字符串的Hamming距离等于字符不同的位置个数,例如,ACGT和GCGA的Hamming距离为2(左数第1, 4个字符不同)。输入整数m和n(4≤m≤50,
4≤n≤1000),以及m个长度为n的DNA序列(只包含字母A,C,G,T),输出到m个序列的Hamming距离和最小的DNA序列和对应的距离。如有多解,要求为字典序最小的解。例如,对于下面5个DNA序列,最优解为TAAGATAC。TATGATACTAAGCTACAAAGATCCTGAGATACTAAGATGTNote:如何找到最优序列???遍历所有可能然后依次对比Distance?一听就有点蠢。观察题目中给出的例子,很容易看出,最优序列的每一列,都是输入序列每一列出现最多的字符。那么问题就很简单了,用一个二维数组存放输入序列,然后按照列进行统计,输出这一列出现最多的字符最后再将最优序列与输入序列进行对比,得出Hamming Distance统计步骤一开始写的太复杂,后来借鉴了的思路,进行了优化。//
ex3-7.c\n\n#include &stdio.h&\n#include &string.h&\nconst char DNA[]=\"ACGT\";\nint main()\n{\n
int m,n;\n
int d=0;//d记录Hamming Distance\n
scanf(\"%d%d\",&m,&n);\n
char s[m][n];//s用于保存输入的DNA序列\n
char count[n][4];//需要一个数组来统计当前列出现最多的字符,这个数组的行数与输入序列的列数相同,每一列代表一个字符\n
char OPT[n];//OPT数组用来记录当前列的最优解\n
memset(count, 0, sizeof(count));//将统计数组清零\n
for(int i=0;i&m;i++)\n
scanf(\"%s\",s[i]);\n
for(int i=0;i&m;i++)\n
for(int j=0;j&n;j++)//按照统计数组的列进行统计\n
count[j][strchr(DNA, s[i][j]) - DNA] ++;//找到该字符在统计数组中对应的位置,并将统计结果+1,这一步用到了之前设置好的DNA数组\n
memset(OPT,0,sizeof(OPT));\n
for(int j=0;j&n;j++)\n
for(int k=0;k&4;k++)\n
if(count[j][k]&count[j][OPT[j]])\n
OPT[j]=k;//将第j列出现最多的字符,对应DNA[]中的位置保存在OPT中\n
计算Hamming Distance\n
for(int j=0;j&n;j++)\n
for(int i=0;i&m;i++)\n
if(s[i][j]!=DNA[OPT[j]])\n
//printf(\"第%d列第%d行的%c%c不一致\\n\",j,i,s[i][j],DNA[OPT[j]]);\n
//printf(\"%d\\n\",d);\n
输出结果以及d\n
for(int i=0;i&n;i++)\n
printf(\"%c\",DNA[OPT[i]]);\n
printf(\"\\n\");\n
printf(\"%d\\n\",d);\n
return 0;\n}\n运行结果示例:5 8\nTATGATAC\nTAAGCTAC\nAAAGATCC\nTGAGATAC\nTAAGATGT\nTAAGATAC(这行是结果...汗...)\n7\nProgram ended with exit code: 0\n习题3-8 循环小数(Repeating Decimals, ACM/ICPC World Finals 1990, UVa202)输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。例如a=5,b=43,小数表示为0.(),循环节长度为21。Special Note:我还把这题拿给我同学看了,他一脸懵b的问我怎么判断开始循环了,果然这是一个盲点啊...目测Lian喵的智商并不能知道解法,其实只需要手写一下除法过程,就会发现,如果某一步的余数是之前出现过的,那么就开始循环了,就按照这个思路来写代码吧!我们需要两个数组,一个用来记录余数,一个用来记录结果的小数位,这题要再一次用到之前第3章eg3.4代码段中的strchr()函数,用于快速判断余数是否在之前出现过。有一个Phd给我描述了一个听起来巨牛b的算法...可惜我没听懂...//
ex3-8.c\n\n#include &stdio.h&\n#include &string.h&\n#define maxn 3001\nint main()\n{\n
int a,b,r;//r记录当前步骤的余数\n
int d[maxn];//d记录小数部分的每一位\n
int count=0;//记录循环节长度\n
scanf(\"%d%d\",&a,&b);\n
printf(\"%d.(\",a/b);//输出整数部分\n
char s[maxn];//s用来记录每一步的余数\n
memset(d,0,sizeof(d));//将小数数组清零\n
memset(s,0,sizeof(s));//将余数数组清零\n
if(a-b&0)//先将结果的整数位去除\n
r=a%b;//初始化余数\n
while(strchr(s,r)==NULL)//如果当前余数没有在被记录过\n
s[count]=r;\n
d[count]=r/b;//记录小数位\n
count++;\n
r=r%b;//更新余数\n
for(int i=0;i&count;i++)\n
printf(\"%d\",d[i]);\n
printf(\")\\n\");\n
printf(\"%d\\n\",count);\n
return 0;\n}\n运行结果示例:\n0.()\n21\nProgram ended with exit code: 0\n嗯,你看,我真的记住了...习题3-9 子序列(All in All, UVa 10340)输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串s。例如,abcde可以得到bce,但无法得到dc。这题倒是简单了,t是较长的那个序列,s是要得到的那个序列,思路就是先把“指针”指向s中的第一个字符,依次遍历t序列,找到s中的第一个字符后,“指针”后移一个,继续遍历t,如果指针移动到s的末尾,说明可以,否则就不行。本题并不用指针...打个比方//
ex3-9.c\n\n#include &stdio.h&\n#include &string.h&\n#define maxn 100\nint main()\n{\n
char s[maxn],t[maxn];\n
scanf(\"%s\",s);\n
scanf(\"%s\",t);\n
int i=0;\n
for(int j=0;j&strlen(t);j++)\n
if(t[j]==s[i])\n
if(i==strlen(s))\n
if(i==strlen(s))\n
printf(\"Yes\\n\");\n
else printf(\"No\\n\");\n}\n运行结果示例LOTUS\nCHLENOWTEIUJSIA\nYes\nProgram ended with exit code: 0\n最后几题都是竞赛专属的,这里就不涉及了,感兴趣的童鞋可以看向之前引用的博客,或者上网搜一搜,答案还是不难找的。好啦,那么这一期就结束了,看看字数居然2W+了,估计够Lian喵看很久,祝你用python写的顺利咯小伙伴们有什么想法或者更好的思路欢迎评论打脸!分享什么的记得带上个原地址,随便转,不要客气。下周我要迎来很多final,所以第5期的更新日期暂时不确定,反正这一期够看很久了。。。吧。。。?米娜,再会~","updated":"T02:21:35.000Z","canComment":false,"commentPermission":"anyone","commentCount":1,"collapsedCount":0,"likeCount":6,"state":"published","isLiked":false,"slug":"","isTitleImageFullScreen":false,"rating":"none","titleImage":"/v2-ba3e719cac5_r.jpg","links":{"comments":"/api/posts//comments"},"reviewers":[],"topics":[{"url":"/topic/","id":"","name":"C / C++"},{"url":"/topic/","id":"","name":"程序员面试"},{"url":"/topic/","id":"","name":"算法与数据结构"}],"adminClosedComment":false,"titleImageSize":{"width":1024,"height":683},"href":"/api/posts/","excerptTitle":"","column":{"slug":"bananacat","name":"Banana's code block"},"tipjarState":"inactivated","annotationAction":[],"sourceUrl":"","pageCommentsCount":1,"hasPublishingDraft":false,"snapshotUrl":"","publishedTime":"T10:21:35+08:00","url":"/p/","lastestLikers":[{"bio":null,"isFollowing":false,"hash":"7c00302d3bef6cf5b41ee9d","uid":388000,"isOrg":false,"slug":"guan-40-24","isFollowed":false,"description":"","name":"Guan","profileUrl":"/people/guan-40-24","avatar":{"id":"da8e974dc","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"程序学生","isFollowing":false,"hash":"3685bdef495aac191ba4a2e298e0ab3c","uid":961100,"isOrg":false,"slug":"wang-rui-hong-28","isFollowed":false,"description":"","name":"王瑞宏","profileUrl":"/people/wang-rui-hong-28","avatar":{"id":"da8e974dc","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":null,"isFollowing":false,"hash":"a2fa02bcea2f","uid":28,"isOrg":false,"slug":"guo-di-15","isFollowed":false,"description":"","name":"東海子由","profileUrl":"/people/guo-di-15","avatar":{"id":"v2-47c6b33491dfabdfec2ad8","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":null,"isFollowing":false,"hash":"e916bc70f95a9b2c2ff92d2b82636cb2","uid":92,"isOrg":false,"slug":"yong-jia-wei-26","isFollowed":false,"description":"","name":"榴莲君","profileUrl":"/people/yong-jia-wei-26","avatar":{"id":"v2-0eb8e1c72dc","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"有所不为,有所为。","isFollowing":false,"hash":"db5cd7a63bcdd04046d5ac","uid":36,"isOrg":false,"slug":"fan-shen-12","isFollowed":false,"description":"","name":"Lucifer","profileUrl":"/people/fan-shen-12","avatar":{"id":"cfcccb7aed7ea79d6db3ee","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false}],"summary":"FYI:文中内容收集整理自《算法竞赛入门经典(第2版)》,版权归原书所有。希望对算法和ACM有兴趣的同学能够购买正版书,因为原书的讲解更加细致,更适合算法竞赛的培训。本笔记配合原书食用更佳。Special Note:Lian喵说她投靠Python不用Java了,心疼我上一…","reviewingCommentsCount":0,"meta":{"previous":{"isTitleImageFullScreen":false,"rating":"none","titleImage":"/50/v2-53e479f1a86be5db40bed48b18adb05e_xl.jpg","links":{"comments":"/api/posts//comments"},"topics":[{"url":"/topic/","id":"","name":"C / C++"},{"url":"/topic/","id":"","name":"程序员面试"},{"url":"/topic/","id":"","name":"算法与数据结构"}],"adminClosedComment":false,"href":"/api/posts/","excerptTitle":"","author":{"bio":"绳命是如此的井菜!","isFollowing":false,"hash":"5ced6cb6087542ebb4084","uid":36,"isOrg":false,"slug":"chen-wei-jia-86","isFollowed":false,"description":"欢迎关注我的专栏/bananacat","name":"陈伟嘉","profileUrl":"/people/chen-wei-jia-86","avatar":{"id":"d9cf5c6a0f42ac0c2a1de","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},"column":{"slug":"bananacat","name":"Banana's code block"},"content":"FYI:文中内容收集整理自《算法竞赛入门经典(第2版)》,版权归原书所有。希望对算法和ACM有兴趣的同学能够购买正版书,因为原书的讲解更加细致,更适合算法竞赛的培训。本笔记配合原书食用更佳。3.1 数组Note:如果要从数组a复制k个元素到数组b,可以这样做:memcpy(b,a,sizeof(int)*k)。当然,如果数组的a和b都是浮点型的,复制时要写成“memcpy(b,a,sizeof(double)*k)”使用memcpy函数要包含头文件string.h如果需要把数组a全部复制到数组b中,可以写的简单一些:memcpy(b,a,sizeof(a))Special Note:想到某只蠢喵用的是Java,这里再贴一下Java的数组复制方法public static native void arraycopy(Object src,
Object dest, int destPos,
int length);
\nsrc - 源数组。
\nsrcPos - 源数组中的起始位置。
\ndest - 目标数组。
\ndestPos - 目标数据中的起始位置。
\nlength - 要复制的数组元素的数量。
\n先看个简单问题:读入一些整数,逆序输出到一行中。已知整数不超过100个。直接上代码://eg3-1\n#include &stdio.h&\n#define maxn 105\nint a[maxn];\nint main()\n{\n
int x,n=0;\n
while(scanf(\"%d\",&x)==1)//需要手动结束输入,手动结束的方法在上一章里有写过\n
a[n++]=x;\n
for(int i=n-1;i&=1;i--)\n
printf(\"%d \",a[i]);\n
printf(\"%d\\n\",a[0]);\n
return 0;\n}\n这段程序很简单,没什么特别需要解释的,其中a[n++]=x这条语句做了两件事:首先赋值a[n]=x,然后执行n=n+1。等同于语句{a[n]=x;n=n+1}运行结果示例:5 2 0 1 3 1 4\n4 1 3 1 0 2 5\nProgram ended with exit code: 0\n开灯问题有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号。k≤n≤1000。样例输入:7 3样例输出:1 5 6 7Note这是一道很经典的题目,很多初学者一看题目都没有什么头绪,会试图用数学方法去解决,或者从人数和灯数中找到某种规律,其实没有这么麻烦,问题的关键只有一点:就是用数组来代表灯。a[1],a[2]......a[n]表示编号为1,2,3,...n的灯是否开着。模拟这些操作即可。//eg3-2\n#include &stdio.h&\n#include &string.h&\n#define maxn 1010\nint a[maxn];\nint main()\n{\n
int n,k,first=1;\n
memset(a,0,sizeof(a));//memset的作用是吧数组a清零,也在string.h中定义\n
scanf(\"%d%d\",&n,&k);\n
for(int i=1;i&=k;i++)\n
for(int j=1;j&=n;j++)\n
if(j%i==0)\n
a[j]=!a[j];\n
for(int i=1;i&=n;i++)\n
if(a[i])\n
if(first)\n
first=0;//first表示当前要输出的变量是否为第一个。第一个变量前不应有空格\n
else printf(\" \");\n
printf(\"%d\",i);\n
printf(\"\\n\");\n
return 0;\n}\nNote:“memset(a,0,sizeof(a))”的作用是把数组a清零,它也在string.h中定义。虽然也可以使用for循环完成相同的任务,但是用memset方便快捷Special Note:本来想照顾一下某只蠢喵,这里写一下Java置零数组的方法,然而Java并没有像C里一样方便快捷置零数组的方法(鱼唇的Java哦^_^) 不过Java有快速清空数组的方法哦。掌握一下吧~运行结果示例:7 3\n1 5 6 7\nProgram ended with exit code: 0\n蛇形填数在n×n方阵里填入1,2,…,n×n,要求填成蛇形。例如,n=4时方阵为:10 11 12 1\n9
16 13 2\n8
15 14 3\n7
5 4\nNote:先梳理一下思路:我们从右上角的1开始填数。这个起始点的位置是(x,y),这里x=n-1,y=0(因为数组大小为n,数组从0开始,因此每行最后一个元素为n-1)。我们模仿一下填数过程,在填数过程中,填数点的移动首先是先向下直到不能填为止,再向左,接着是向上,最后是向右。这里要特别说一下“不能填”是什么概念,不能填的情况有两种,一种是填写下一个数字时会出界,另一种情况是,填写下一个数字时会覆盖已填写的数字。为了方便判断,我们将所有的格子初始化为0。//
eg3-3.c\n\n#include &stdio.h&\n#include &string.h&\n#define maxn 20\nint a[maxn][maxn];\nint main()\n{\n
int n,x,y,tot=0;\n
scanf(\"%d\",&n);\n
memset(a,0,sizeof(a));\n
tot=a[x=0][y=n-1]=1;\n
while(tot&n*n)\n
while(x+1&n && !a[x+1][y])//不用担心这里a[x+1][y]会访问非法内存,&&是短路运算符,如果x+1不通过,不执行后续的检查\n
a[++x][y]=++tot;//向右走到“不能走”的情况\n
while(y-1&=0 && !a[x][y-1])//注意这里是&=\n
a[x][--y]=++tot;//向上走到“不能走”的情况\n
while(x-1&=0 && !a[x-1][y])//注意这里是&=\n
a[--x][y]=++tot;//向左走到“不能走”的情况\n
while(y+1&n && !a[x][y+1])\n
a[x][++y]=++tot;//向下走到“不能走”的情况\n
for(x=0;x&n;x++)\n
for(y=0;y&n;y++)\n
printf(\"%3d\",a[x][y]);\n
printf(\"\\n\");\n
return 0;\n\n}\nNote:这段程序的重点就在于那个4条件的while循环,仅仅看代码可能很难理解这一段的运行原理,建议可以代入到实际填数过程中试一试,看看每一条判断语句对应的是哪种情形。(代码里有注释,先假装没看到可好)第2和第3条判断语句一定要注意是&=0,因为数组是从0开始的,一开始我写的是&,然后调了半天都没发现错在哪里了。运行结果示例:7\n 19 20 21 22 23 24
1\n 18 37 38 39 40 25
2\n 17 36 47 48 41 26
3\n 16 35 46 49 42 27
4\n 15 34 45 44 43 28
5\n 14 33 32 31 30 29
6\n 13 12 11 10
7\nProgram ended with exit code: 0\n3.2 字符数组竖式问题找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但所写程序中应该输出空格,而非小数点)。样例输入:\n2357\n样例输出:\n&1&\n..775\nX..33\n-----\n..\n-----\n25575\nThe number of solutions = 1\nNote:先说一下这题的思路,尝试所有的abc和de的组合,判断是否满足条件。为了照顾某只...,先给出整个程序的伪代码:char s[20];\nint count = 0;
\nscanf(\"%s\", s);\nfor(int abc = 111; abc &= 999; abc++)//先不要管这里为什么是111和11,后面会提到\n
for(int de = 11; de &= 99; de++)\n
if(\"abc*de\"是个合法的竖式)\n
printf(\"&%d&\\n\", count);\n
打印abc*de的竖式和其后的空行\n
count++;\n
}\nprintf(\"The number of solutions = %d\\n\", count);\nscanf(\"%s\", s)的作用是读入下一个不含空格、TAB和回车符的字符串,存入字符数组s。注意和scanf(\"%d\",&n)不同的是,这里s前没有&符号。输出格式也是这个问题的难点之一,但不是我们要重点关注的问题,因此不做过多的解释。先集中解决如何确定abc和de。下面给出完整代码://
eg3-4.c\n#include &stdio.h&\n#include &string.h&\nint main()\n{\n
int count=0;\n
char s[20],buf[99];\n
scanf(\"%s\",s);\n
for(int abc=111;abc&=999;abc++)//关于这里为什么从111和11开始循环有一些争议,笔者认为如果考虑100*10=1000这种情形,那么应该从100和10开始循环,题目要求不够严谨,这里姑且按照书上的代码为准\n
for(int de=11;de&=99;de++)\n
int x=abc*(de%10),y=abc*(de/10),z=abc*de;\n
sprintf(buf,\"%d%d%d%d%d\",abc,de,x,y,z);//sprintf的作用是把信息输出到字符串,用法和printf、fprintf类似,但应当保证字符串足够大,可以容纳输出信息\n
int ok=1;\n
for(int i=0;i&strlen(buf);i++)//strlen(s)的作用是获取字符串s的实际长度\n
if(strchr(s,buf[i])==NULL)\n
printf(\"&%d&\\n\",++count);\n
printf(\"%5d\\nX%4d\\n-----\\n%5d\\n%4d\\n-----\\n%5d\\n\\n\",abc,de,x,y,z);\n
printf(\"The number of solutions = %d\\n\",count);\n
return 0;\n}\n/*\n strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:\n char *strchr(const char *__s, int __c);\n*/\nNote:先说说代码中循环从111和11开始的问题,笔者的想法已经写在注释里了。我也查阅了一些网上的代码,都是从111和11开始循环的,也没有找到特别靠谱的回答。我和同学讨论了这个问题,尝试将循环改为100和10开始,因为我们考虑到确实有100*10=1000也符合题意,更改后的程序更加全面。至于原程序为什么从111和11开始,我只能表示应该是因为题目要求比较模糊,不够严谨吧。sprintf的作用是把信息输出到字符串,用法和printf、fprintf类似,但应当保证字符串足够大,可以容纳输出信息strlen(s)的作用是获取字符串s的实际长度strchr() 用来查找某字符在字符串中首次出现的位置,新技能get!Special Note:Java中“貌似”没有sprintf这样能够直接将多个数字直接存入字符串的函数,不过你可以参考下面这个方法,或者试试手动将这几个数字存入字符串?public static void main(String[] args) {
String str=null;
str=String.format(\"格式参数$的使用:%1$d,%2$s\", 99,\"abc\");
System.out.println(str); }\n输出结果:\n格式参数$的使用:99,abc
\nstrlen()在Java中就很简单了,直接返回string.length即可strchr()在Java里也有类似的方法可以直接调用:indexOf(String s)具体的用法如下:String str =\"We are students\";\nint size = str.indexOf(\"a\"); // 变量size的值是3\n更多关于Java中字符串的操作可以看这篇博客:运行结果示例:25678\n&1&\n
55\n-----\n \n-----\n28875\n\n&2&\n
66\n-----\n \n-----\n57882\n\nThe number of solutions = 2\nProgram ended with exit code: 0\n3.3 竞赛题目选讲例题3-1 TeX中的引号(Tex Quotes, UVa 272)在TeX中,左双引号是“``”,右双引号是“''”。输入一篇包含双引号的文章,你的任务是把它转换成TeX的格式。样例输入:\n\"To be or not to be,\" quoth the Bard, \"that\nis the question\".\n样例输出:\n``To be or not to be,'' quoth the Bard, ``that\nis the question''.\nNote:之前使用的“scanf(\"%s\")”输入字符串的方法不能在本题中使用,因为它碰到空格或者TAB就会停下,虽然下次调用时会输入下一个字符串,但是不知道两次输入的字符串中间有多少空格、TAB或是换行,因此,本题中使用getchar从标准输入读取一个字符。//
eg3-5.c\n#include &stdio.h&\nint main()\n{\n
int c,q=1;\n
while((c=getchar())!=EOF)\n
if(c=='\"')\n
printf(\"%s\",q?\"``\":\"''\");//第一次输出左引号,第二次输出右引号,这里的处理非常巧妙\n
else printf(\"%c\",c);\n
return 0;\n}\nNote:c=getchar())!=EOF直接利用了getchar的返回值,与EOF进行比较,依次读取输入,直到输入结束。运算符?的用法是:a?b:c其含义是:当a为真时值为b,否则为c。运行结果示例:\"You are just a cat but I am a banana,\" said Winnie,\"that you can eat me\".\n``You are just a cat but I am a banana,'' said Winnie,``that you can eat me''.\n例题3-2 (WERTYU, UVa10082)把手放在键盘上时,稍不注意就会往右错一位。这样,输入Q会变成输入W,输入J会变成输入K等。输入一个错位后敲出的字符串(所有字母均大写),输出打字员本来想打出的句子。输入保证合法,即一定是错位之后的字符串。例如输入中不会出现大写字母A。样例输入:\nO S, GOMR YPFSU/\n样例输出:\nI AM FINE TODAY.\nNote:这题的关键在于如何将错误的输入转换为输出?一种方法是使用if语句或者switch语句,如\"if(c
putchar('Q')\"。但很明显,这样做太麻烦。一个较好的方法是使用常量数组下面是完整程序://
eg3-6.c\n#include &stdio.h&\nchar s[]=\"`-=QWERTYUIOP[]\\\\ASDFGHJKL;'ZXCVBNM,./\";//注意这里\\\\是\\的转义字符,否则\\A会造成歧义\nint main()\n{\n
int i,c;\n
while((c=getchar())!=EOF)\n
for(i=1;s[i];i++){//找错位之后的字符在常量表中的位置,这里对原来的条件做了一些修改,原程序为(i=1; s[i] && s[i]!=c; i++)\n
if(s[i]==c)\n
putchar(s[i-1]);//如果找到,则输出它的前一个字符\n
//else putchar(c);\n
return 0;\n}\n运行结果示例:WRYIP]SFHK;XVN,/\nQETUO[ADGJLZCBM.\n例题3-3 回文字(Palindromes, UVa401)输入一个字符串,判断它是否为回文串以及镜像串。输入字符串保证不含数字0。所谓回文串,就是反转以后和原串相同,如abba和madam。所谓镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。注意,并不是每个字符在镜像之后都能得到一个合法字符。在本题中,每个字符的镜像如图所示(空白项表示该字符镜像后不能得到一个合法字符)。输入的每行包含一个字符串(保证只有上述字符。不含空白字符),判断它是否为回文串和镜像串(共4种组合)。每组数据之后输出一个空行。样例输入:\nNOTAPALINDROME\nISAPALINILAPASI\n2A3MEAS\nATOYOTA\n样例输出:\nNOTAPALINDROME -- 既不是回文串也不是镜像串.\nISAPALINILAPASI -- 仅是回文串.\n2A3MEAS -- 仅是镜像串.\nATOYOTA -- 既是回文串也是镜像串.\nNote:这个题目好长,看起来挺难的,其实真的很简单,多读几遍,理解理解题目之后其实很简单的。//
eg3-7.c\n\n\n#include &stdio.h&\n#include &string.h&\n#include &ctype.h&\nconst char* rev=\"A
2TUVWXY51SE Z
8 \";//这个字符数组用来存放所有字符的镜像字符,用于后面的检查\nconst char* msg[]={\"既不是回文串也不是镜像串\",\"仅是回文串\",\"仅是镜像串\",\"既是回文串也是镜像串\"};\nchar r(char ch)\n{\n
if(isalpha(ch))\n
return rev[ch-'A'];\n
return rev[ch-'0'+25];\n}\nint main()\n{\n
char s[30];\n
while(scanf(\"%s\",s)==1)\n
int len=strlen(s);\n
int p=1,m=1;//p是回文串的判断标志,m是镜像串的判断标志\n
for(int i=0;i&(len+1)/2;i++)\n
if(s[i]!=s[len-1-i])\n
p=0;//不是回文串\n
if(r(s[i])!=s[len-1-i])\n
m=0;//不是镜像串\n
printf(\"%s -- %s.\\n\\n\",s,msg[m*2+p]);//一个很简洁的输出形式\n
return 0;\n}\nNote:自定义了函数char r(char ch),参数ch是一个字符,返回值是ch的镜像字符isalpha是用来判断字符是否为字母的,类似的还有idigit,isprint等等,在ctype.h中定义最后值得关注的是msg[m*2+p]这个巧妙地输出形式,因为一种只有4种输出可能,可以理解为00,01,10,11,p和m分别表示二进制的两位。这么做避免了用判断语句进行一一判断再输出。运行结果示例:\n -- 仅是回文串.\n\n1AAAA1\n1AAAA1 -- 既是回文串也是镜像串.\n\n\n -- 既不是回文串也不是镜像串.\n\n13e1\n13e1 -- 既不是回文串也不是镜像串.\n\n13E1\n13E1 -- 仅是镜像串.\n例题3-4 猜数字游戏的提示(Master-Mind Hints, UVa 340)(ACM,选做)实现一个经典\"猜数字\"游戏。给定答案序列和用户猜的序列,统计有多少数字位置正(A),有多少数字在两个序列都出现过但位置不对(B)。输入包含多组数据。每组输入第一行为序列长度n,第二行是答案序列,接下来是若干猜测序列。猜测序列全0时该组数据结束。n=0时输入结束。样例输入:\n4\n1 3 5 5\n1 1 2 3\n4 3 3 5\n6 5 5 1\n6 1 3 5\n1 3 5 5\n0 0 0 0\n10\n1 2 2 2 4 5 6 6 6 9\n1 2 3 4 5 6 7 8 9 1\n1 1 2 2 3 3 4 4 5 5\n1 2 1 3 1 5 1 6 1 9\n1 2 2 5 5 5 6 6 6 7\n0 0 0 0 0 0 0 0 0 0\n0\n样例输出:\nGame 1:\n
(4,0)\nGame 2:\n
(7,0)\n那个,不熟悉规则同学可以去玩一下Note:直接统计可得A,为了求B,对于每个数字(1~9),统计二者出现的次数c1和c2,则min(c1,c2)就是该数字对B的贡献。最后要减去A的部分。代码如下://
eg3-8.c\n//
ACM\n\n\n#include &stdio.h&\n#define maxn 1010\nint main()\n{\n
int n,a[maxn],b[maxn];//a用来存放正确答案的序列,b用来存放玩家的猜测序列\n
int kase=0;//kase是游戏轮次的标识符\n
while(scanf(\"%d\",&n)==1 && n)//n=0时输入结束\n
printf(\"Game %d:\\n\",++kase);\n
for(int i=0;i&n;i++)\n
scanf(\"%d\",&a[i]);\n
int A=0,B=0;//A表示位置和数字都正确的数字个数,B表示数字正确,位置不一定正确的数字个数\n
for(int i=0;i&n;i++)\n
scanf(\"%d\",&b[i]);\n
if(a[i]==b[i])\n
if(b[0]==0)\n
break;//因为本题的要求是对1~9进行猜测,所以一般不会出现0,因此只需要对b的第一位进行判断即可,但是这样做并不严谨\n
for(int d=1;d&=9;d++)\n
int c1=0,c2=0;\n
for(int i=0;i&n;i++)\n
if(a[i]==d)\n
c1++;//统计数字d在正确序列中出现的次数\n
if(b[i]==d)\n
c2++;//统计数字d在猜测序列中出现的次数\n
if(c1&c2)\n
B+=c2;//得出数字正确但位置不一定正确的数字的个数\n
(%d,%d)\\n\",A,B-A);\n
return 0;\n}\n那个。。。我就不放运行结果了,读(笨)者(喵)测试完之后可以把结果图发给我,我再给贴上来例题3-5 生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)如果x加上x的各个数字之和得到y,就说x是y的生成元。给出n(1≤n≤100000),求最小生成元。无解输出0。例如,n=216,121,2005时的解分别为198,0,1979。Note:这题书上给的“聪明”解法其实好蠢啊!列举了10000以内所有数字的最小生成元,然后查表,不过既然说了这是聪明的解法,我也照着实现一遍吧://
eg3-9.c\n\n\n#include &stdio.h&\n#include &string.h&\n#define maxn 100005\nint ans[maxn];\nint main()\n{\n
int T,n;\n
memset(ans,0,sizeof(ans));\n
for(int m=1;m&maxn;m++)\n
int x=m,y=m;//x的作用是记录当前数据m,y的作用是记录数据m能生成的数\n
while(x&0)\n
y+=x%10;\n
x/=10;//依次分离出x的个十百千等位,计算m加上m的各位数字之和等于多少,存放在y里\n
if(ans[y]==0||m&ans[y])\n
ans[y]=m;//若数字y所对应的位置还没有生成元,且当前生成元是y的最小生成元,则将m存放在ans[y]中\n
这里第二条条件语句m&ans[y]应该是无效的,因为m从0到maxn遍历,已经存入ans[]的数字必然比后面的数字小,因此不可能出现m&ans[y]的情况,所以第二个条件始终不能被满足\n
scanf(\"%d\",&T);\n
while(T--)//这里的T表示一共有多少组输入数据,但是题目里没有要求标明输入数据的组数,因此可以不用这个while循环\n
scanf(\"%d\",&n);\n
printf(\"%d\\n\",ans[n]);\n
return 0;\n}\n例题3-6 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)(ACM,选做)长度为n的环状串有n种表示法,分别为从某个位置开始顺时针得到。例如,图3-4的环状串有10种表示:CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在这些表示法中,字典序最小的称为\"最小表示\"。输入一个长度为n(n≤100)的环状DNA串(只包含A、C、G、T这4种字符)的一种表示法,你的任务是输出该环状串的最小表示。例如,CTCC的最小表示是CCCT,CGAGTCAGCT的最小表示为AGCTCGAGTC。Note:本题出现了一个新概念:字典序。所谓字典序,就是字符串在字典中的顺序。一般地,对于两个字符串,从第一个字符开始比较,当某一个位置的字符不同时,该位置字符较小的串,字典序较小(例如,abc比bcd小);如果其中一个字符串已经没有更多字符,但另一个字符串还没结束,则较短的字符串的字典序较小(例如,hi比history小)。字典序的概念可以推广到任意序列,例如,序列1, 2, 4, 7比1, 2, 5小。学会了字典序的概念之后,本题就不难解决了:就像\"求n个元素中的最小值\"一样,用变量ans表示目前为止,字典序最小串在输入串中的起始位置,然后不断更新ans。//
eg3-10.c\n//
ACM\n\n\n#include &stdio.h&\n#include &string.h&\n#define maxn 105\n/*\n 比较函数less,用于比较字符串s的两种不同的表示方法p和q,如果p比q小则返回真(1),p比q大则返回假(-1),否则两个序列相等\n */\nint less(const char* s,int p, int q)\n{\n
int n=strlen(s);\n
for(int i=0;i&n;i++)\n
if(s[(p+i)%n]!=s[(q+i)%n])//从两个字符串的首字符开始比较,直到比较到第一个不一致的字符为止\n
return s[(p+i)%n]&s[(q+i)%n];\n
return 0;//否则相等\n}\nint main()\n{\n
char s[maxn];\n
scanf(\"%d\",&T);\n
while(T--)\n
scanf(\"%s\",s);\n
int ans=0;\n
int n=strlen(s);\n
for(int i=1;i&n;i++)\n
if(less(s,i,ans))\n
for(int i=0;i&n;i++)\n
putchar(s[(i+ans)%n]);\n
putchar('\\n');\n
return 0;\n}\n运行结果示例:1\nCGAGTCAGCT\nAGCTCGAGTC\nProgram ended with exit code: 0\nhmm,以上就是第三章的内容和笔记了,下一次更新暂时不定,看你什么时候写完咯!再会!","state":"published","sourceUrl":"","pageCommentsCount":0,"canComment":false,"snapshotUrl":"","slug":,"publishedTime":"T15:06:45+08:00","url":"/p/","title":"《算法竞赛入门经典》读书笔记(3)数组和字符串","summary":"FYI:文中内容收集整理自《算法竞赛入门经典(第2版)》,版权归原书所有。希望对算法和ACM有兴趣的同学能够购买正版书,因为原书的讲解更加细致,更适合算法竞赛的培训。本笔记配合原书食用更佳。3.1 数组Note:如果要从数组a复制k个元素到数组b,可以这样…","reviewingCommentsCount":0,"meta":{"previous":null,"next":null},"commentPermission":"anyone","commentsCount":3,"likesCount":3},"next":{"isTitleImageFullScreen":false,"rating":"none","titleImage":"/50/v2-dd31edf6170cce44f312d6_xl.jpg","links":{"comments":"/api/posts//comments"},"topics":[{"url":"/topic/","id":"","name":"史蒂夫·乔布斯(Steve Jobs)"},{"url":"/topic/","id":"","name":"英语翻译"},{"url":"/topic/","id":"","name":"苹果公司 (Apple Inc.)"}],"adminClosedComment":false,"href":"/api/posts/","excerptTitle":"","author":{"bio":"绳命是如此的井菜!","isFollowing":false,"hash":"5ced6cb6087542ebb4084","uid":36,"isOrg":false,"slug":"chen-wei-jia-86","isFollowed":false,"description":"欢迎关注我的专栏/bananacat","name":"陈伟嘉","profileUrl":"/people/chen-wei-jia-86","avatar":{"id":"d9cf5c6a0f42ac0c2a1de","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},"column":{"slug":"bananacat","name":"Banana's code block"},"content":"A Sister’s Eulogy for Steve Jobs致乔布斯——来自妹妹的悼词Mona Simpson莫娜o辛普森本文来自于日斯坦福大学纪念堂举办的的乔布斯纪念会上的悼词。I grew up as an only child, with a single mother. Because we were poor and because I knew my father had emigrated from Syria, I imagined he looked like Omar Sharif. I hoped he would be rich and kind and would come into our lives (and our not yet furnished apartment) and help us. Later, after I’d met my father, I tried to believe he’d changed his number and left no forwarding address because he was an idealistic revolutionary, plotting a new world for the Arab people.我是家里唯一的孩子,单身妈妈抚养我长大,关于我的父亲,我只知道他是叙利亚移民,我们一家过着简朴贫困的日子。我时常把我父亲的形象和奥马尔o沙里夫(埃及男演员,曾获奥斯卡男配角提名-译者注)联系在一起。我真希望他是一个富裕慷慨的人,忽然有一天能出现在我们的生活里,出现在我们未经修缮的简陋屋舍中,帮助我们度过生活的难关。后来我真的见到了我的父亲,我试图说服我自己相信,他更换号码,几度搬迁是因为他是一个充满理想的革命者——一位为了阿拉伯人民奋斗努力开创新世界的革命者。乔布斯与养父保罗· 乔布斯在一起。史蒂夫的妹妹莫娜找到了他们的生父后,史蒂夫一直拒绝见他。” 来自: 沃尔特o艾萨克森 (Walter Isaacson). “史蒂夫o乔布斯传(Steve Jobs:A Biography)”Even as a feminist, my whole life I’d been waiting for a man to love, who could love me. For decades, I’d thought that man would be my father. When I was 25, I met that man and he was my brother.即使作为一名女权主义者,我也一直在憧憬着一个能和我彼此关怀的男人。数十年间,我一直以为那会是我的父亲,直到我25岁那年,我终于遇到了那个人,而他却是我的哥哥。By then, I lived in New York, where I was trying to write my first novel. I had a job at a small magazine in an office the size of a closet, with three other aspiring writers. When one day a lawyer called me — me, the middle-class girl from California who hassled the boss to buy us health insurance — and said his client was rich and famous and was my long-lost brother, the young editors went wild. This was 1985 and we worked at a cutting-edge literary magazine, but I’d fallen into the plot of a Dickens novel and really, we all loved those best. The lawyer refused to tell me my brother’s name and my colleagues started a betting pool. The leading candidate: John Travolta. I secretly hoped for a literary descendant of Henry James — someone more talented than I, someone brilliant without even trying.那会儿我住在纽约,一边在一家小杂志社上班,一边构思着我的处女作,并不宽敞的办公室挤着我和另外三名满怀抱负的编辑。忽然有一天,一位律师联系我,说他的客户是我失踪已久的哥哥,他现在小有名气并且相当富有——而我那会儿还只是一个来自加州中产家庭的普通女孩,纠缠着老板审批我的医保手续。得知这个消息,杂志社的编辑几乎惊诧地欢呼起来。那是1985年,我们工作在一家先锋文学杂志社,却在切切实实地经历狄更斯小说中的桥段(指《雾都孤儿》译者注),我们欢喜极了。律师拒绝透露我哥哥的名字,他到底是谁呢?我们漫无边际地猜想起来,长长的“候选名单”中,约翰o特拉沃塔(美国男演员,曾出演《低俗小说》)位居前列,而私下里我却暗自希望他出自文学世家亨利o詹姆斯的家族后人中,他一定远比我才华横溢也一定毫无疑问地比我睿智卓越。When I met Steve, he was a guy my age in jeans, Arab- or Jewish-looking and handsomer than Omar Sharif.还记得我第一次和乔布斯见面,他和我年龄相仿,身着牛仔裤,有着典型的阿拉伯或者犹太人式的英俊外貌——拿奥马尔o沙立夫和他相比都毫不为过。We took a long walk — something, it happened, that we both liked to do. I don’t remember much of what we said that first day, only that he felt like someone I’d pick to be a friend. He explained that he worked in computers.我们一起漫步,走了很久——这仿佛是我俩的共同爱好。我不记得那天我们都谈了些什么,只记得他更像是一位我愿意倾心的好友。他告诉我他正从事计算机相关的工作。I didn’t know much about computers. I still worked on a manual Olivetti typewriter.I told Steve I’d recently considered my first purchase of a computer: something called the Cromemco.Steve told me it was a good thing I’d waited. He said he was making something that was going to be insanely beautiful.我对计算机了解相当有限,那时我还在用一台手动的Olivetti打字机。我告诉他,我最近也有考虑过或许应该入手一台电脑了,我觉得Cromemco或许不错。史蒂夫让我不妨再等一等,他正在制造某种无比精美的产品。I want to tell you a few things I learned from Steve, during three distinct periods, over the 27 years I knew him. They’re not periods of years, but of states of being. His full life. His illness. His dying.和哥哥认识27年的历程大致可以分成三个阶段,他给了我很多启发,有一些不妨和大家分享。这三个阶段并不是按照时间线来划分的,而是他的精神状态——他的生命,他的病情和他的去世。Steve worked at what he loved. He worked really hard. Every day.That’s incredibly simple, but true.He was the opposite of absent-minded.乔布斯一生都在从事他热爱的工作,每一天都投入在工作中,无时无刻。听起来似乎是那么简单,但是确实真实的。他专注于所做的事情,从不允许分心。He was never embarrassed about working hard, even if the results were failures. If someone as smart as Steve wasn’t ashamed to admit trying, maybe I didn’t have to be.即使有时即便努力,最终也以失败告终,他也从来没有沮丧过。我想,既然像乔布斯这样聪明的人都直面自己努力后的失败,我又何必遮遮掩掩呢?When he got kicked out of Apple, things were painful. He told me about a dinner at which 500 Silicon Valley leaders met the then-sitting president. Steve hadn’t been invited.He was hurt but he still went to work at Next. Every single day.最初被苹果开除的日子对乔布斯来说是难熬的。他和我提起过那场宴会,美国总统同硅谷的科技巨头进行了会面,规模足足有500人,他却没有受到邀请。我知道他伤痛难掩,但是他依然去NeXT上班,每天如此。Novelty was not Steve’s highest value. Beauty was.乔布斯追求的并不是时尚新奇,永恒的美才是他的向往。For an innovator, Steve was remarkably loyal. If he loved a shirt, he’d order 10 or 100 of them. In the Palo Alto house, there are probably enough black cotton turtlenecks for everyone in this church.作为一位革新者,乔布斯有着异常的坚守。如果他钟情一款衬衫,他会订购10件100件。在帕罗奥托的家里,那儿的黑色高领衫足够给每位到场的来宾一件。He didn’t favor trends or gimmicks. He liked people his own age.乔布斯厌倦噱头和潮流。他更倾向于和他的同龄人交往。His philosophy of aesthetics reminds me of a quote that went something like this: “Fashion is what seems beautiful now
art can be ugly at first but it becomes beautiful later.”他的美学价值观印证了这样一句格言:“时尚是乍见之欢,艺术是久经不衰。”Steve always aspired to make beautiful later.He was willing to be misunderstood.乔布斯一直想要创作久经不衰的美。正因如此,他早已做好了或许会被人们误会的准备。Uninvited to the ball, he drove the third or fourth iteration of his same black sports car to Next, where he and his team were quietly inventing the platform on which Tim Berners-Lee would write the program for the World Wide Web.被硅谷抛弃在外,他只能一次又一次的驾驶者自己的黑色跑车去往NeXT,在那儿,他的团队悄然建立了一个新的开发平台,正是在这个平台上,蒂姆o伯纳斯o李(英国计算机科学家,万维网之父,曾出席2012年伦敦奥运会开幕式演出-译者注)创建了万维网络。2012年伦敦奥运会开幕式:Lee在一台NeXT计算机前工作Steve was like a girl in the amount of time he spent talking about love. Love was his supreme virtue, his god of gods. He tracked and worried about the romantic lives of the people working with him.Whenever he saw a man he thought a woman might find dashing, he called out, “Hey are you single? Do you wanna come to dinner with my sister?”每每谈及“爱”这个字眼,乔布斯便像一个姑娘一样。“爱”是乔布斯的崇高的精神追求,他将之奉若神明。员工们工作之余的恋爱生活时常成为他关注的焦点。每当他看见一个在女孩子眼中颇有魅力的男士,他脱口便问:“你单身吗?愿不愿意和我的妹妹约个会什么的?”I remember when he phoned the day he met Laurene. “There’s this beautiful woman and she’s really smart and she has this dog and I’m going to marry her.”When Reed was born, he began gushing and never stopped. He was a physical dad, with each of his children. He fretted over Lisa’s boyfriends and Erin’s travel and skirt lengths and Eve’s safety around the horses she adored.我依然记得乔布斯初见劳伦(乔布斯后来的妻子-译者注)的那天,他迫不及待的打电话给我:“我遇到了一位漂亮的女士,她好聪明,还养了一条狗,我想和她结婚!”后来里德出生了,乔布斯的父爱一下子迸发出来,从此再也没有消停过。他作为每个孩子的父亲,凡事无不亲力亲为。他挑剔丽萨(乔布斯和女友布伦南的女儿)新交的男朋友,他担心艾琳的出行,指责她裙子的长短,关切伊芙和她钟爱的马儿玩耍时的安危。None of us who attended Reed’s graduation party will ever forget the scene of Reed and Steve slow dancing.没有人会忘记,在里德的毕业舞会上,他们父子俩翩翩共舞的场景。His abiding love for Laurene sustained him. He believed that love happened all the time, everywhere. In that most important way, Steve was never ironic, never cynical, never pessimistic. I try to learn from that, still.他对妻子劳伦的爱历久弥新,是他永恒的精神支柱。乔布斯坚信,爱渗透在点滴小事中。在这方面,他从未冷言嘲讽,也从未愤世嫉俗更没有透露过丝毫的悲观。时至今日,我依然要向他学习。Steve had been successful at a young age, and he felt that had isolated him. Most of the choices he made from the time I knew him were designed to dissolve the walls around him. A middle-class boy from Los Altos, he fell in love with a middle-class girl from New Jersey. It was important to both of them to raise Lisa, Reed, Erin and Eve as grounded, normal children. Their house didn’t intimidat in fact, for many of the first years I knew Steve and Lo together, dinner was served on the grass, and sometimes consisted of just one vegetable. Lots of that one vegetable. But one. Broccoli. In season. Simply prepared. With just the right, recently snipped, herb.乔布斯一直认为,正是他的年少有为让他倍受孤立。我认识他以来,他所做出的诸多努力都是为了融化周围的坚冰。来自洛斯阿尔托斯和新泽西中产家庭的男孩女孩彼此相爱,共同将丽萨、里德、艾琳和伊芙像普通孩子一样抚养长大。他们的家里没有琳琅的艺术品,也没有奢侈的装潢,事实上,我同乔布斯以及劳伦认识这么多年以来,我们时常在草地上用餐,有时甚至只一样蔬菜。西兰花是餐桌上的常客,有时可根据时节上些别的菜点。总之简单准备几下就端上了餐桌。Even as a young millionaire, Steve always picked me up at the airport. He’d be standing there in his jeans.When a family member called him at work, his secretary Linetta answered, “Your dad’s in a meeting. Would you like me to interrupt him?”When Reed insisted on dressing up as a witch every Halloween, Steve, Laurene, Erin and Eve all went wiccan.虽然年纪轻轻就是百万富翁,乔布斯却总是亲自去机场接我。一下飞机,他总是站在那儿,穿着那条熟悉的牛仔裤。有时孩子们在他工作时找他,秘书琳娜塔会回答说:“你爸爸在开会呢,要不要我去转告他?”每逢万圣节,里德便会装扮成巫师的模样,乔布斯、劳伦、艾琳和伊芙于是也都换上了巫师的装扮。选自《史蒂夫乔布斯传》(沃尔特·艾萨克森) 黛安娜·沃克摄影集They once embarked
it took years. They cooked on a hotplate in the garage. The Pixar building, under construction during the same period, finished in half the time. And that was it for the Palo Alto house. The bathrooms stayed old. But — and this was a crucial distinction — it had been a great Steve saw to that.This is not to say that he didn’t enjoy his success: he enjoyed his success a lot, just minus a few zeros. He told me how much he loved going to the Palo Alto bike store and gleefully realizing he could afford to buy the best bike there.And he did.有一次,一家人着手厨房改造的事情,这一改就是好几年,他们只好去仓库里用电热炉做饭。而皮克斯(美国动画制作公司,乔布斯曾担任董事和首席执行官-译者注)的大厦,也刚好同期在修建中,大致建了一半的样子。这便是乔布斯在帕罗奥托的家,浴室还是老样子。不同的是,这个家意味着一个新的开始,乔布斯始终这样坚信着。乔布斯并不是不享受成功带来的喜悦,相反,他很喜欢这种感觉,只是依然克制冷静,保持专注。他也曾兴奋地告诉我,他特别喜欢去帕罗奥托的自行车店铺转转,然后惊喜的发现自己可以买下那儿最好的自行车。然后他就真的买下了。选自《史蒂夫乔布斯传》(沃尔特·艾萨克森) 黛安娜·沃克摄影集Steve was humble. Steve liked to keep learning.乔布斯是一个谦逊的人,他始终保持着求知的心。Once, he told me if he’d grown up differently, he might have become a mathematician. He spoke reverently about colleges and loved walking around the Stanford campus. In the last year of his life, he studied a book of paintings by Mark Rothko, an artist he hadn’t known about before, thinking of what could inspire people on the walls of a future Apple campus.Steve cultivated whimsy. What other C.E.O. knows the history of English and Chinese tea roses and has a favorite David Austin rose?有一次他和我说起,如果他成长在不同的时代,他或许会成为一个数学家。每每提到大学,他字里行间便会透露出尊重,他时常徜徉在斯坦福的校园中。在他生前的最后一年里,他还买来了一本马克o罗斯科的画集,他之前对罗斯科知之甚少。而此刻他欣赏着这些画作,却畅想着未来的苹果大学的校园墙上或许该绘制些什么来启迪后来者们。乔布斯时常萌生一些奇特的爱好,还有哪位CEO会对英国历史和中国玫瑰的栽培史烂熟于心的?又有哪位CEO会对大卫o奥斯丁的玫瑰情有独钟?He had surprises tucked in all his pockets. I’ll venture that Laurene will discover treats — songs he loved, a poem he cut out and put in a drawer — even after 20 years of an exceptionally close marriage. I spoke to him every other day or so, but when I opened The New York Times and saw a feature on the company’s patents, I was still surprised and delighted to see a sketch for a perfect staircase.With his four children, with his wife, with all of us, Steve had a lot of fun.He treasured happiness.乔布斯的口袋中总是装着意想不到的小玩意儿——他喜欢的乐曲,一首精致的小诗,都会被裁剪下来,放在抽屉里。即便已经彼此相伴了20年,我打赌劳伦依然会为这些小发现而感到惊喜。尽管我每天都和乔布斯交谈,但是当我翻开纽约时报,看到公司专利的报道时,也不免会为那个完美的楼梯设计草图而感到震惊。Then, Steve became ill and we watched his life compress into a smaller circle. Once, he’d loved walking t

我要回帖

更多关于 运动图像的题目和答案 的文章

 

随机推荐