朋友面試頭條二輪了,一輪的題目請看這一篇:
這次的面試題目是:判斷一個數是否是happy number(每一位的平方和最終為1)
知道題目首先要理解題目,所謂happy number就是一個整數每個位數上的數字的平方相加,一直回圈,如果最終能等于1,則就是happy number,
舉例:19
第一次:12=92=82
第二次:82+22=68
第三次:62+82=100
第四次:1
這樣的數就是happy number,
怎么解決呢?這樣的問題可以一直回圈運算,發現等于1就是happy number,不等于就不是,我朋友就采取的是這種方法,但這種方法有個問題,如果不是happy number要什么時候停止回圈進行判斷呢?因為不知道回圈是否是重復的,或還是無限不重復的回圈,還有就是這種回圈極容易溢位,所以最好的方法還是要找出規律,
以下就是我的線下手動運算,目的是找出規律:


從0~19的運算結果來看可以得出以下結論:
1.0不是happy number;
2.所有happy number最終都能等于1;
3.所有不是happy number的數都是無限重復回圈,且都從4開始回圈,
得出了以上規律就可以開始寫程式代碼了,
計算平方和的方法:
public static int SumSquares(int number) { var dic = new ArrayList(); while (true) { dic.Add(number % 10); if (number / 10 == 0) { break; } number = number / 10; } var num = 0; foreach (var item in dic) { num += (int)item * (int)item; } return num; }
判斷是否是Happy Number:
public static bool IsHappyNumber(int number) { while (true) { if (number == 4) break; if (number == 1) return true; number = GetNumber(number); } return false; }
最后在main方法中呼叫:
static void Main(string[] args) { while (true) { Console.WriteLine("請輸入一個整數(輸入exit退出):"); var writeText = Console.ReadLine(); if (writeText == "exit") break; var number = Convert.ToInt32(writeText); bool isHappyNumber = IsHappyNumber(number); if (isHappyNumber) Console.WriteLine("輸入的是一個Happy Number!"); else Console.WriteLine("輸入的不是一個Happy Number!"); Console.WriteLine(); } Console.ReadKey(); }
測驗:

成功!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/273154.html
標籤:其他
上一篇:【工程應用一】 多目標多角度的快速模板匹配演算法(基于NCC,效果無限接近Halcon中........)
下一篇:即時訊息技術剖析與實戰
