xxx定律-poj-3782
xxx定律
Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1639????Accepted Submission(s): 1303
Problem Description
對于一個數n,如果是偶數,就把n砍掉一半;如果是奇數,把n變成 3*n+ 1后砍掉一半,直到該數變為1為止。
請計算需要經過幾步才能將n變到1,具體可見樣例。
?
?
Input
測試包含多個用例,每個用例包含一個整數n,當n為0 時表示輸入結束。(1<=n<=10000)
?
?
Output
對于每組測試用例請輸出一個數,表示需要經過的步數,每組輸出占一行。
?
?
Sample Input
3
1
0
?
?
Sample Output
5
0
?
?
Source
浙大計算機研究生復試上機考試-2009年
?
解題思路:
1、? 判斷奇偶,按題目要求進行計算即可。
?
程序代碼:
#include<stdio.h>
int main()
{
??? int n,m,k;
??? while(scanf("%d",&n)&&n!=0)
??? {
??? k=0;
???? while(n!=1)??????????? // 只要不等于 1? 就繼續執行循環體
????? {
???????? if(n&1)???????? // 1的二進制? 是 0001?? 所以與 1 按位與之后 若為0 則n 為偶數,若不為0 則n 為奇數。
????????? {
?????????? n=3*n+1;??
?????????? n>>=1;???????????? // 向有移移位 相當于 除以 2.
?????????? }
?????????? else
??????????? n>>=1;
?????????? k++;?
????? }
????? printf("%d\n",k);
??? }
??? return 0;
}
?
轉載于:https://www.cnblogs.com/zhouhongweihpu/p/3230127.html
總結
以上是生活随笔為你收集整理的xxx定律-poj-3782的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Repeater嵌套绑定Repeater
- 下一篇: 转仁兄:Binary search an