当前位置: 首页 > news >正文

怎么自己建立网站及建立网站方法前端开发 网站建设

怎么自己建立网站及建立网站方法,前端开发 网站建设,彩票网站建设哪家公司好,上海装修公司排名前20【题目描述】 输入3个整数#xff0c;从小到大排序后输出。 【样例输入】 20 7 33 【样例输出】 7 20 33 【解析】 本题解法大概有3种#xff1a; 1、穷举条件法。 此方法先判断a、b、c大小的所有可能#xff0c;再根据各种可能性输出不同的排序。 思路是先判断a、…【题目描述】 输入3个整数从小到大排序后输出。 【样例输入】 20 7 33 【样例输出】 7 20 33 【解析】 本题解法大概有3种 1、穷举条件法。 此方法先判断a、b、c大小的所有可能再根据各种可能性输出不同的排序。 思路是先判断a、b的大小此时可把a、b想象成一个数轴上的两个点即将数轴分成3个部分然后再判断c在这3个部分中的哪一段由此实现排序输出。 这种方法是正向法对条件的穷举比较费脑细胞不够简单明了。 #includestdio.hint main(){int a, b, c;scanf(%d%d%d, a, b, c);if(ab){if(ca){printf(%d %d %d, c, a, b);}else if(cb){printf(%d %d %d,a, b, c);}else{printf(%d %d %d,a, c, b);}}else{if(cb){printf(%d %d %d, c, b, a);}else if(ca){printf(%d %d %d,b, a, c);}else{printf(%d %d %d,b, c, a);}}return 0;} 2、排列法最简单的方法。 这种方法属于逆向思维法其好处是由结果反推条件能够避开复杂的逻辑判断。 abc三个数的全排列有6种abc、acb、bac、bca、cab、cba所以最简单的方法就是直接用if判断这6种输出对应的条件。 #includestdio.hint main(){int a, b, c;scanf(%d%d%d, a, b, c);if(a b b c)printf(%d %d %d\n, a, b, c);if(a c c b)printf(%d %d %d\n, a, c, b);if(b a a c)printf(%d %d %d\n, b, a, c);if(b c c a)printf(%d %d %d\n, b, c, a);if(c a a b)printf(%d %d %d\n, c, a, b);if(c b b a)printf(%d %d %d\n, c, b, a);return 0;} 上述程序看上去没有错误而且能通过题目中给出的样例但可惜有缺陷输入“111”将得不到任何输出 这个例子说明样例输出正确不代表程序正确。因为程序要满足对任意符合要求的输入均得到正确的结果而不仅是样例数据。 上面的问题在于忽略了输入数据相等的情况。上述6种排列的充分必要条件为a≤b≤c、a≤c≤b、b≤a≤c、b≤c≤a、c≤a≤b、c≤b≤a。 那把所有的 “”改成“”总可以了吧很遗憾还是不行。对于“111”6种情况全部符合程序会输出6次“111”。 解决方案是把所有的if改成else if这样就可以让程序自动排除交叉情况。下面是优化后的最终代码 #includestdio.hint main(){int a, b, c;scanf(%d%d%d, a, b, c);if(a b b c) printf(%d %d %d\n, a, b, c);else if(a c c b) printf(%d %d %d\n, a, c, b);else if(b a a c) printf(%d %d %d\n, b, a, c);else if(b c c a) printf(%d %d %d\n, b, c, a);else if(c a a b) printf(%d %d %d\n, c, a, b);else if(c b b a) printf(%d %d %d\n, c, b, a);return 0;} 注最后一条else if还可以简化成单独的else。 英语单词else表示“其他”也就是“除此之外”、“否则”。比如一个妹子说if(你爱我) 我就给你生儿子; else 我就死在你面前; 可见起到排除交叉作用的正是这个else。 有些人称else if为语句这是错误的它们并不共同构成一个独立的语句。因else if虽然写在一起但它们的关系并没有想象中的那么亲密无间。上面的代码本质上只是一个if…else语句的嵌套。 比如下面这样一组语句 if(...) ...;else if(...) ...;else if(...) ...; 它的真实面目是这样的 if(...) ...;else {if(...) ...;else {if(...) ...;}} 只不过后一种写法有些麻烦故而把else if凑在一起实现了代码形式上的简洁。 总之有了else就能让编译器为我们排除条件交叉的情况从而大大简化逻辑判断。 如果本题只用不含else的if语句大家就能体会到其逻辑判断有多复杂。 不用else就要人为设置好所有条件做到“不重不漏”这样的条件一共有多少种呢 如果三整数不相等那么这道题就简单了本算法中第一段代码就是正解。 但是如果考虑到等号就比较复杂了所以本题的关键就是判断输入数据相等的情况。 可以根“相等”的情况将本题的条件分类 ①三个数都不相等 ②有两个数相等 ③三个数都相等。 第①种情况刚才已经讨论过了第③种情况也很简单即abc关键是第②种情况。 第②种情况又可分为三种情形ab相等、bc相等 、ac相等。 当ab相等时与c比较又分为两种情形ab小于cab大于c。据此上面三种情形又可细分为6种条件 a) ab相等时分为两种情形abcabc b) bc相等时分为两种情形bcabca c) ac相等时分为两种情形acbacb 综上本题要判断的条件一共有13种 ①三个数都不相等6种 ②有两个数相等6种 ③三个数都相等1种 这就是人为判断条件的复杂程度代码如下 #includestdio.hint main(){int a, b, c;scanf(%d%d%d, a, b, c);//三个数都不相等的6种条件if(a b b c)printf(%d %d %d\n, a, b, c);if(a c c b)printf(%d %d %d\n, a, c, b);if(b a a c)printf(%d %d %d\n, b, a, c);if(b c c a)printf(%d %d %d\n, b, c, a);if(c a a b)printf(%d %d %d\n, c, a, b);if(c b b a)printf(%d %d %d\n, c, b, a);//两个数相等的6种条件if(a b b c)printf(%d %d %d\n, a, b, c);if(a b b c)printf(%d %d %d\n, c, a, b);if(b c c a)printf(%d %d %d\n, b, c, a);if(b c c a)printf(%d %d %d\n, a, b, c);if(a c c b)printf(%d %d %d\n, a, c, b);if(a c c b)printf(%d %d %d\n, b, a, c);//三个数都相等的1种条件if(a b b c)printf(%d %d %d\n, a, b, c);return 0;} 这段代码虽然条件很多但好在理解起来容易。 能不能减少一下判断条件的数量呢可以的但是就需要更复杂的逻辑判断理解起来也更复杂。 思路就是把“两个数相等的6种条件”与“三个数都不相等的6种条件”合并判断更确切地说是把前者“插入”到后者。 后者表达式中所有的符号都是“”所以问题就变成了在后者的表达式中加“”。 这里面需要注意合并后的每个条件表达式只能含有一个等号。换句话说“两个数相等的6种条件”中的每个条件只能与“三个数都不相等的6种条件”中唯一的一个条件合并6种条件要一一对应。 因为一旦含有两个等号就会出现重复条件判断。 比如a b c可以分解为a b ca b c。 而a b c却会分解为a b ca b cab cabc。 如果把要加等号的条件以“”为线分为左右两部分则两侧都不能出现相同的等式如下图 总结起来规则有两条 ①每个if条件中只能有一个“” ②左右两侧都不能出现相同的等式。 假设在第一个条件中的a b b c左侧加入等号即变成a b b c则可以依照上面两条规则从此等号开始按下图路线推出所有要加“”的地方。 加入“”后的代码如下 #includestdio.hint main(){int a, b, c;scanf(%d%d%d, a, b, c);//三个数都不相等两个数相等的6种条件if(a b b c)printf(%d %d %d\n, a, b, c);if(a c c b)printf(%d %d %d\n, a, c, b);if(b a a c)printf(%d %d %d\n, b, a, c);if(b c c a)printf(%d %d %d\n, b, c, a);if(c a a b)printf(%d %d %d\n, c, a, b);if(c b b a)printf(%d %d %d\n, c, b, a);//三个数都相等的1种条件if(a b b c)printf(%d %d %d\n, a, b, c);return 0;} 前面讲过a b c分解为a b ca b cab cabc所以可以将代码进一步合并 #includestdio.hint main(){int a, b, c;scanf(%d%d%d, a, b, c);//三个数都不相等两个数相等三个数都相等的6种条件if(a b b c)printf(%d %d %d\n, a, b, c);if(a c c b)printf(%d %d %d\n, a, c, b);if(b a a c)printf(%d %d %d\n, b, a, c);if(b c c a)printf(%d %d %d\n, b, c, a);if(c a a b)printf(%d %d %d\n, c, a, b);if(c b b a)printf(%d %d %d\n, c, b, a);return 0;} 这就是不含else的最精简的代码。 之所以弄这么一大通就是为了让客官体验一下没有else的帮助编写代码将会多么的复杂而且一不小心等号加错了位置就会前功尽弃。有了else就完全避免了以上复杂的逻辑分析还不容易出错真的是又快又准。 3、交换变量排序法还有一种思路是把a、b、c这3个变量本身改成a≤b≤c的形式。步骤如下 1通过交换变量让a变成3个数的最小值。首先让a分别与b、c比较如果ab、c则交换a和b、c利用前面讲过的三变量交换法,从而保证a≤c且a≤b也就是将a变成3个数的最小值。 2通过交换变量让b变成b、c中的最小值。检查b和c如果bc交换b、c。 #includestdio.hint main(){int a, b, c, t;scanf(%d%d%d, a, b, c);if(a b) { t a; a b; b t; } //执行完毕之后a≤bif(a c) { t a; a c; c t; } //执行完毕之后a≤c且a≤b依然成立if(b c) { t b; b c; c t; }printf(%d %d %d\n, a, b, c);return 0;} 总结本题需要注意的是输入限定条件——3个整数。也就是说只要满足3个整数即可没限定这3个整数相不相等。所以本题要考虑输入的三个数相等的情况。
http://www.zqtcl.cn/news/477823/

相关文章:

  • 海伦网站建设做网站建设的联系电话
  • 免费做字体的网站枣强网站建设代理
  • 建设网站素材海南百度推广公司电话
  • 温州企业网站建设费用培训行业门户网站建设方案
  • 口碑好的常州网站优化深圳市光明区实验学校
  • 网站怎么做微博认证网页设计代码html作品展示
  • 在线网站建设活动初创企业的建站流程
  • 汨罗哪里有网站开发的公司电话百度首页关键词推广
  • 天津百度整站优化服务政务网站模版
  • 推荐家居企业网站建设用什么工具修改wordpress
  • wix做的网站能扒下来哈尔滨做网站的oeminc
  • 做网站的网络公司门户网站介绍
  • 软件公司网站系统集成建设下拉关键词排名
  • 景翔物流网站建设公司企业网站优化排名
  • 余姚做网站62752762素材网站建设需要多少费用
  • dede网站后台导入文档许昌网站开发哪家好
  • 网站建设宣传psdwordpress 链接关系
  • 宁波网站建设免费咨询深圳做棋牌网站建设找哪家公司好
  • 安阳门户网站html5网页代码
  • 企业建站系统下载广州有几个区几个县级市
  • 时装网站建设的背景广州建设专业网站
  • 来年做那些网站能致富网站建设优化文档
  • 好看的商城网站企业所得税分录
  • 网站建设你懂的网站提高内容的丰富度创意
  • 菏泽做网站设计做一个简单的网站需要多少钱
  • html企业网站怎么做免费crm平台
  • 婚庆公司网站制作如何自己制作首页网站
  • ic外贸网站建设龙岩app制作
  • 长沙企业建网站绵阳市三台县城乡建设局网站
  • 常宁市城市建设规划管理局网站织梦网做网站步骤