【志银】NYOJ《题目529》flip
2018-06-17 23:48:42来源:未知 阅读 ()
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=529
由于此题槽点太多,所以没忍住...
吐槽Time:
看到这题通过率出奇的高然后愉快的进来想水掉...but...
一开始狂百度找讨论区也完全看不懂题意啊,
还好后来通过这些零碎的线索补脑了下面的题意,
能AC但不很确定484题目本意,希望对大家有帮助(话说这样会不会帮倒忙啊^_^).
题目意思:
要通过x的二进制的任意位置上的数(0变为1,或1变为0)使十进制的x变为x+1, 一次只能改变二进制的x的一位,求最少需要的次数.哈哈!
解题思路:
通过人工打草稿的方法加上手指和快速的心算在纸上(这算神马算法0.0)算出了1~5的结果,过程简单描述如下
1(0001) ->0011->0010 ->2(0010)=>变2次
2(0010) ->0011 ->3(0011)=>变1
3(0011) ->0111->0110->0100 ->4(0100)=>变3
4(0100) ->0101 ->5(0101)=>变1
5(0101) ->0111->0110 ->6(0110)=>变2
哈哈,得到规律:x的二进制数从1开始从右往左数第一个0的位置是几就最少需要改变几次。
(ps:话说这么长的原理连自己都觉得有点像说了和没说一样)
(规律原理:最少改变次数为x的二进制加1后包括进位所改变的位置数,二进制加1的进位改变停止于x的二进制数从右往左数第一个0的位置.)
我去,终于可以写代码了..最近漫画看多了,不知不觉吐了这么多槽,这么难得不能浪费得写到博客里去,哈哈哈哈
//对于我这种单纯boy来说还是来段我的简单走心的暴力法吧,超时什么的咱不怂,哈哈,(提交后AC的说,嘿嘿)
1 #include<iostream> 2 using namespace std; 3 int main() { 4 int T, x, n; 5 cin >> T; 6 while(T--) { 7 cin >> x; 8 n = 0; 9 int y = x%2; 10 do { 11 y = x%2; 12 x /= 2; 13 n++; 14 } while(y != 0); 15 cout << n << endl; 16 } 17 }
开始写于:2016.9.9 ----志银
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 【志银】NYOJ《题目490》翻译 2018-11-05
- NYOJ1238 最小换乘 (dijkstra) 2018-09-05
- 【志银】NYOJ《题目524》A-B Problem 2018-06-17
- nyoj-一笔画问题-欧拉图+联通判定 2018-06-17
- 【志银】NYOJ《题目490》翻译 2018-06-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash