24h購物| | PChome| 登入
2012-06-14 17:09:42| 人氣909| 回應0 | 上一篇 | 下一篇

[UVA] 944 - Happy Numbers

推薦 0 收藏 0 轉貼0 訂閱站台

Happy Numbers

Background

Let the sum of the squares of the digits of a positive integer s0 be represented by s1. In a similar way, let the sum of the squares of the digits of s1 be represented by s2, and so on. If si=1 for some i>=1, then the original integer s0 is said to be happy. For example, starting with 7 gives the sequence

7, 49 (=7^2), 97 (=4^2+9^2), 130 (=9^2+7^2), 10 (=1^2+3^2), 1 (=1^2),

so 7 is a happy number.

The first few happy numbers are 1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100, .... The number of iterations i required for these to reach 1 are, respectively, 1, 6, 2, 3, 5, 4, 4, 3, 4, 5, 5, 3, ....

A number that is not happy is called unhappy. Once it is known whether a number is happy (unhappy), then any number in the sequence s1, s2, s3, ... will also be happy (unhappy). Unhappy numbers have eventually periodic sequences of si which do not reach 1 (e.g., 4, 16, 37, 58, 89, 145, 42, 20, 4, ...).

Any permutation of the digits of a happy (unhappy) number must also be happy (unhappy). This follows from the fact that addition is commutative. Moreover, the product of a happy (unhappy) number by any power of ten is a happy (unhappy) number. Example: 58 is an unhappy number; then, so are 85, 580, 850, 508, 805, 5800, 5080, 5008, 8050, 8500, and so on.

Problem

Decide which numbers, in a given closed interval, are happy numbers.

Input

The input has n lines each of them corresponding to a test case. Every line contains two positive integers between 1 and 99999 (inclusive) each; the first integer, L, is the low limit of the closed interval; the second one, H, is the high limit (L ≤ H).

Output

The output is composed of the happy numbers that lie in the interval [L,H], together with the number of iterations required for the corresponding sequences of squares to reach 1.

There must be a line for each happy number containing the happy number followed by a space and the number of iterations required for the sequence of squares to reach 1.

Print a blank line between two consecutive test cases.

Sample Input

5 28
233 250

Sample Output

7 6
10 2
13 3
19 5
23 4
28 4

236 6
239 6




#include <stdio.h>
#include <set>
using namespace std;
int happy[100000] = {};
void solve() {
int i;
for(i = 1; i < 100000; i++) {
int l = 0, n = i, tmp;
set<int> s;
while(n != 1) {
l++;
tmp = 0;
while(n) {
tmp += (n%10)*(n%10);
n /= 10;
}
n = tmp;
if(s.find(n) != s.end())
break;
s.insert(n);
}
if(n == 1)
happy[i] = l+1;
}
}
int main() {
solve();
int flag = 0, L, H;
while(scanf("%d %d", &L, &H) == 2) {
if(flag)
puts("");
flag = 1;
for(int i = L; i <= H; i++) {
if(happy[i])
printf("%d %d\n", i, happy[i]);
}
}
return 0;
}

台長: Morris
人氣(909) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: UVA |
此分類下一篇:[UVA] 11787 - Numeral Hieroglyphs
此分類上一篇:[UVA][建表] 347 - Run

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文