iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 6
0
自我挑戰組

資工的日常系列 第 6

CPE Happy Number

  • 分享至 

  • xImage
  •  

聖誕節快樂阿/images/emoticon/emoticon54.gif,各位,沒想到我還要作在電腦前codingQQ

2017/12/19 CPE
題目:https://uva.onlinejudge.org/external/105/p10591.pdf
先說明這題因為不明原因,我無法將按資直接複製貼上執行。所以這題我算沒完成 冏。

題目概要:
我猜很多人死在題目,根本考英文和眼力XD。首先這句話一定要仔細看。
Let the sum of the square of the digits of a positive integer S0 be represented by S1.
sum of the square->平方總和,這很多看得懂,但後面... of the digits 沒看到就爆了,我一開始看的時候也沒看到/images/emoticon/emoticon02.gifdigits是位元所以,
sum of the square of the digits 就是所有位數的平方和。始在搞不懂為什麼一定要這麼多of。
所以整句話就是S1=S0的位元平方總合,S2後依此類推。
If Si = 1 for some
i ≥ 1, then the original integer S0 is said to be Happy number.
在i>=1,也就是第二項開始後有"位元平方總合"是1的話就是"Happy number",如果後面有回到重複回到自己的話(Ex: 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4)那麼這數字就不可能是happy number。

input:
第一行是幾組case。第二行是是要處理的數字。
output:
以特定格式輸出:
Case #p: N is a Happy number.
Case #p: N is an Unhappy number.
p是目前case的編號,從一開始。

解法:
把讀入的數字弄成字串,之後就可以針對各個位元作平方。平方和拿到後判斷是不是1,是1的話就跳出去且印出他是happy number的訊息。不是的話就先看一下是不是一開始的數字(S0),如果是的話就是unhappy number並印出訊息,不是的話就繼續找下一個。

import java.util.Scanner;

public class HappyNumber {
	public static void main(String[] args){
		int caseNum;
		String num;
		Scanner scanner=new Scanner(System.in);
        //caseNum 要處理幾個case
		caseNum=Integer.parseInt(scanner.nextLine());
        //case迴圈
		for(int i=0;i<caseNum;i++){
            //scan一行字串並記下來S0
			String S0=scanner.nextLine();
            //預設boolean是happy number
			boolean happy=true;
            //num是目前要計算的數字 先給S0
			num=S0;
            //sum是平方總合用的變數
			int sum;
            //確認他是不是happy number的do-while迴圈
			do{
				sum=0;//要加總先回復到0
                //各位數平方總合相加
				for(int j=0;j<num.length();j++){
                    //chartAt第一位找到最後一位數,(int)轉型是從ASCII轉。
                    //ASCII的是48所以-48就從字元轉到數字了
					int digit=(int)num.charAt(j)-48;
					sum+=digit*digit;
				}
                //num我用的是string,所以要轉一下
				num=String.valueOf(sum);
                //確認有沒有跟S0重複,有的話是unhappy number
				if(num.equals(S0)){
					happy=false;
					break;
				}
                //sum=1的話是happy number
			}while(sum!=1);
			//題目要求的格式
			if(happy){
				System.out.println("Case #"+(i+1)+": "+S0+" is a Happy number.");
			}else if(!happy){
				System.out.println("Case #"+(i+1)+": "+S0+" is an Unhappy number.");
			}
		}
		scanner.close();
	}
}

上一篇
HTML 做出2層的下拉式選單 JQuery
下一篇
CPE 考題 Back to High School Physics
系列文
資工的日常30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言