L2-029 特立独行的幸福 (25分)GPLT团体程序设计天梯赛

本文探讨了如何使用C++编程语言识别特立独行的幸福数和质数。通过定义特立独行的幸福数为经过特定操作最终能够归结为1的数,并且在过程中不重复出现中间结果,文章提供了详细的算法实现。此外,还介绍了判断质数的方法,并展示了如何将这些概念应用于给定范围内的数字,最后输出特立独行的幸福数及其相关计数,以及质数的倍数情况。

在这里插入图片描述

在这里插入图片描述这道题最大的坑点居然是pow返回的是浮点型…一开始用pow怎样都不通过
用visit来记录幸福数,1为特立独行的幸福数,-1为不特立独行的幸福数

#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int visit[10010];//特立独行幸福数为1,不特立独行幸福数为-1
int num[10010];//独立数
int squsum(int t){    
	int sum=0;    
	while(t){        
		sum +=(t%10)*(t%10);//用pow错了        
		t=t/10;    
		}    
	return sum;
}
bool isprime(int t){    
	for(int i=2;i<=sqrt(t);i++){        
		if(t%i==0)  
		return false;    
	}    
	return true;
}
int main(){    
	int begin,end;    
	cin>>begin>>end;    
	set<int>s;    
	for(int i=begin;i<=end;i++){
	        int t=i;        
	        if(visit[t]==-1)    continue;        
	        while(true){
	                t=squsum(t);            
	                if(t==1){                
	                visit[i]=1;        
	        	for(auto it=s.begin();it!=s.end();it++)             
	        	       visit[*it]=-1;                
	                num[i]=s.size()+1;//包括自己                
	                s.clear();                
	                break;            
	                }            
	                if(s.find(t)!=s.end()){
	                        s.clear();         
	                        break;            
	                }            
	                s.insert(t);        
	         }
	}    
	int cnt=0;    
	for(int i=begin;i<=end;i++){
	     if(visit[i]==1){
	            if(isprime(i))  num[i] *=2;
	            cout<<i<<" "<<num[i]<<endl;            
	            cnt++;
	     }    
	 }    
	 if(cnt==0)  cout<<"SAD";    
	 return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值