首页 > 编程语言 >团体程序设计天梯赛 L2-029 特立独行的幸福

团体程序设计天梯赛 L2-029 特立独行的幸福

时间:2024-03-27 22:31:21浏览次数:27  
标签:幸福 迭代 int 样例 特立独行 L2 天梯 029 数字

L2-029 特立独行的幸福

分数 25

对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;其独立性就是依附于它的的幸福数的个数。如果这个数还是个素数,则其独立性加倍。例如 19 在区间[1, 100] 内就是一个特立独行的幸福数,其独立性为 2×4=8。

另一方面,如果一个大于1的数字经过数次迭代后进入了死循环,那这个数就不幸福。例如 29 迭代得到 85、89、145、42、20、4、16、37、58、89、…… 可见 89 到 58 形成了死循环,所以 29 就不幸福。

本题就要求你编写程序,列出给定区间内的所有特立独行的幸福数和它的独立性。

输入格式:

输入在第一行给出闭区间的两个端点:1<A<B≤104。

输出格式:

按递增顺序列出给定闭区间 [A,B] 内的所有特立独行的幸福数和它的独立性。每对数字占一行,数字间以 1 个空格分隔。

如果区间内没有幸福数,则在一行中输出 SAD

输入样例 1:

10 40

输出样例 1:

19 8
23 6
28 3
31 4
32 3

注意:样例中,10、13 也都是幸福数,但它们分别依附于其他数字(如 23、31 等等),所以不输出。其它数字虽然其实也依附于其它幸福数,但因为那些数字不在给定区间 [10, 40] 内,所以它们在给定区间内是特立独行的幸福数。

输入样例 2:

110 120

输出样例 2:

SAD

题解 

遍历寻找每个幸福数,如果这个数最终能回到1,就把这个过程所有的数的祖宗设置为改数。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
int a,b;
int v[20005];
int d[20005];
int last[20005];
bool isz(int x)//质数判断
{
	if(x<2) return false;
	if(x==2) return true;
	for(int i=2;i<=sqrt(x);i++)
	{
		if(x%i==0)
		{
			return false;
		}
	}
	return true;
}
int main()
{
	cin>>a>>b;
	for(int i=a;i<=10000;i++)
	{
		int t=i;
		int op=0;
		map<int,int> mp;//用来记录是否出现了两次
		vector<int> bj;
		//bj.push_back(t);
		mp[t]++;
		while(t<=20000)
		{
			
			int temp=t;
			int sum=0;
			while(temp)
			{
				int tp=temp%10;
				temp/=10;
				sum+=tp*tp;
			}
			//cout<<i<<" "<<sum<<endl;
			if(mp[sum]) break;//之前出现过 说明进入了循环 结束
			mp[sum]++;
			bj.push_back(sum);
			//v[sum]=v[t]+1;
			//last[sum]=t;
			t=sum;
			if(t==1)
			{
				d[i]=1;
				for(auto k:bj)
				{
					d[k]=1;
					v[i]++;
					if(last[k]==0)
					{
						last[k]=i;//找到最初始的
					}
					
				}
			}
			
			
		}
	}
	//cout<<last[32]<<endl;
	int op=0;
	for(int i=a;i<=b;i++)
	{
		if(d[i]==1 && (last[i]<a || last[i]>b))
		{
            op++;
			cout<<i<<" ";
			if(isz(i))
			{
				cout<<2*v[i]<<endl;
			}
			else
			{
				cout<<v[i]<<endl;
			}
		}
	}
     if(op==0)
     {
         cout<<"SAD"<<endl;
     }
	return 0;
}

标签:幸福,迭代,int,样例,特立独行,L2,天梯,029,数字
From: https://blog.csdn.net/X_StarX/article/details/137091427

相关文章

  • L2-028 秀恩爱分得快
    可恶的模拟,借鉴了别人的思路,这样写很清晰#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;constintN=1e5+10;constintinf=0x3f3f3f3f;constintmod=1e9+7;intn,q,m;vector<int>a,b;doubleg[1010][1010];doublemaxn[1010];set<......
  • 2024SMUSpring天梯2补题
    L2-2:红色警报题意:只要连通块数目减少就输出RedAlert,主要是连通块数目..intn,m,k;unordered_map<int,int>mark;vector<int>vct[505];boolvis[505];voiddfs(intx){for(autov:vct[x]){if(!vis[v]&&!mark[v]){vis[v]=1;dfs(......
  • PTA L2-033 简单计算器 手写栈
    本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S1​ 存放数字,另一个堆栈 S2​ 存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:从 S1​ 中弹出两个数字,顺序为 n1​ 和......
  • V4L2 ioctl调用流程分析
    学习资料:韦东山第三期 可参考:https://www.cnblogs.com/lethe1203/p/18097351video_device->.fops->v4l2_file_operations->.ioctl_ops->v4l2_ioctl_opsv4l2_ioctl_ops可分为两类:INFO_FL_STD:标准的,无需特殊的代码来处理,APP的调用可以直达这些处理函数I......
  • V4L2驱动程序整体框架
    学习资料:韦东山第三期 应用程序调用open/read/write会调用到v4l2_fops的相应函数:接口层再调用到硬件相关的代码,根据打开的文件得到一个video_device(根据此设备号),调用这个video_device里面的vdev->fops->open函数可以看到read和ioctl也是类似的: 应用程序进入到驱动之......
  • V4L2应用程序开发(2)
    参考资料:韦东山第三期  V4L2获取数据的操作流程如下:打开设备ioctlVIDIOC_QUERYCAP:QueryCapbility,查询能力枚举格式、设置格式ioctlVIDIOC_REQBUFS:申请bufferioctlVIDIOC_QUERYBUF和mmap:查询buffer信息、映射ioctlVIDIOC_QBUF:把buffer放入"空闲链表"ioctlVIDIO......
  • Linux V4l2简单使用
    V4L2:VideoforLinuxtwo,缩写Video4Linux2,是Linux内核中的一个框架,提供了一套用于视频设备驱动程序开发的API。它是一个开放的、通用的、模块化的视频设备驱动程序框架,允许Linux操作系统和应用程序与各种视频设备(如摄像头、视频采集卡等)进行交互。V4L2提供了通用的API,使......
  • V4L2应用程序开发(1)
    参考资料:韦东山第三期 v4l2应用程序开发分为两个部分,数据采集流程和控制流程两个部分 数据采集流程:分为空闲链表和完成链表 驱动程序周而复始地做如下事情:从硬件采集到数据把"空闲链表"取出buffer,把数据存入buffer把含有数据的buffer放入"完成链表"APP也会周而......
  • wsl2 ubuntu子系统安装显卡驱动与cuda
    wsl2安装参考文档:http://t.csdnimg.cn/ClwJ9演示安装ubuntu22列出可安装的子系统命令:wsl--list--onlinePSC:\Users\linyu>wsl--list--online以下是可安装的有效分发的列表。使用'wsl.exe--install<Distro>'安装。NAMEF......
  • 2024年天梯成信小赛--L2-3,L2-4补题
    L2-3:Gwen的小剪刀题意:思路:二分美感度+克鲁斯卡尔intn,m,sum0;typedefstructmyp{intu,v;intb,h;};boolcmp(mypa,mypb){returna.h<b.h;}myparr[200005];intfa[100005];intfind(intx){// if(x==fa[x])returnx;// returnfa[x]=find(fa[x......