`
从此醉
  • 浏览: 1046093 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

uva 10591 - Happy Number

 
阅读更多

点击打开链接


题目意思: 给定一个数n,然后进行操作,先求出这个数每一位的平方和,然后这个和替代n继续做这个操作,知道当前的n为1 或 n之前以经出现过 ,如果n等于则是happy number ,反之不是。


解题思路: 暴力搜素+状态判重。

对于这一题一个状态就是这个数字n,由于最大的n是10^9,那么平方和最大不超过1000,我们开一个vis[1000]数组来做为标记数组即可,当遇到n 初始值 或 vis[n] = 1则退出,初始化vis[1] = 1;


代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <cstdio>
#include <stack>
#include <queue>
#include <cmath>
using namespace std;
#define MAXN 10000

int vis[MAXN];
int main(){
    //freopen("input.txt" , "r" , stdin);
    int sum , flag , cnt;
    int i , n , m;
    scanf("%d%*c" , &cnt);
    for(i = 1 ; i <= cnt ; i++){
        scanf("%d" , &n);
        memset(vis ,  0 , sizeof(vis));
        flag = 0 ; m = n ; vis[1] = 1;
        while(1){
            sum = 0;
            for(int j = n ; j !=0 ; j = n){
                int t = n%10;
                sum += t*t;
                n /= 10;
            }
            n = sum ;
            if(vis[n] || n == m){
                if(n == 1) flag = 1;
                break;
            }
            vis[n] = 1;
        }
        if(flag) printf("Case #%d: %d is a Happy number.\n" , i , m);
        else printf("Case #%d: %d is an Unhappy number.\n" , i , m);
    }
    return 0;
}



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics