程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> NYOJ:題目529 flip,nyoj題目529flip

NYOJ:題目529 flip,nyoj題目529flip

編輯:C++入門知識

NYOJ:題目529 flip,nyoj題目529flip


題目鏈接: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  ----志銀

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved