POJ 1016 Numbers That Count 不难,但要注意细节
题意是将一串数字转换成另一种形式。比如5553141转换成2个1,1个3,1个4,3个5,即21131435。1000000000000转换成12011。数字的个数是可能超过9个的。n个m,m是从小到大排序。
输出的结果又四种情况,建议判断的时候就按照题目的顺序进行判断,否则可能出错。第一种情况是进行一次变换后和原来的数字相同;第二种是进行j次后和原来数字相同;第三种是变换过程中形成了循环,比如70:
70是2循环,又最后3组数字可判断出;第四种情况是超过15次变换仍然找不出规律。
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAX 85
using namespace std; char n[MAX];
int a[10]; int main()
{
freopen("in.txt","r",stdin);
while(1)
{
char str[16][MAX]= {0}; //先全部变换,将原始数字和变换后的都保存下来
memset(n,0,sizeof(n)); //初始化
scanf("%s",n);
if(n[0]=='-')
break;
strcpy(str[0],n);
for(int i=0; i<15; i++) //15次变换
{
memset(a,0,sizeof(a)); //初始化
for(int j=0; j<10; j++) //查找0~9每个数字,并保存至数字a[j]
for(int k=0; k<strlen(str[i]); k++)
{
if(str[i][k]==j+'0')
a[j]++;
}
for(int j=0,k=0; j<10; j++)
if(a[j]>=10) //这里的细节需要注意一下,个数大于或等于10,需要保存三位数
{
str[i+1][k]=a[j]/10+'0';
str[i+1][k+1]=a[j]%10+'0';
str[i+1][k+2]=j+'0';
k+=3;
}
else if(a[j]>0 && a[j]<10)
{
str[i+1][k]=a[j]+'0';
str[i+1][k+1]=j+'0';
k+=2;
}
}
bool flag=true;
if(strcmp(str[0],str[1])==0)
{
printf("%s is self-inventorying\n",str[0]);
flag=false;
}
if(flag)
for(int i=1; i<=15; i++)
if(strcmp(str[i],str[i+1])==0)
{
printf("%s is self-inventorying after %d steps\n",str[0],i);
flag=false;
break;
}
if(flag)
for(int i=13; i>=0; i--)
if(strcmp(str[15],str[i])==0)
{
printf("%s enters an inventory loop of length %d\n",str[0],15-i);
flag=false;
break;
}
if(flag)
printf("%s can not be classified after 15 iterations\n",str[0]);
}
return 0;
}
POJ 1016 Numbers That Count 不难,但要注意细节的更多相关文章
- poj 1016 Numbers That Count
点击打开链接 Numbers That Count Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17922 Accep ...
- POJ1016 Numbers That Count
题目来源:http://poj.org/problem?id=1016 题目大意: 对一个非负整数定义一种运算(inventory):数这个数中各个数字出现的次数,然后按顺序记录下来.比如“55531 ...
- POJ 1016 模拟字符串
Numbers That Count Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20396 Accepted: 68 ...
- Numbers That Count POJ - 1016
"Kronecker's Knumbers" is a little company that manufactures plastic digits for use in sig ...
- POJ 1016
http://poj.org/problem?id=1016 一道字符串处理的题目,理解题意后注意细节就好. 题意:每一串数字 都可以写成 a1 b1 a2 b2 ....ai bi 其中ai是指bi ...
- B - Numbers That Count
Description "Kronecker's Knumbers" is a little company that manufactures plastic di ...
- poj Pseudoprime numbers 3641
Pseudoprime numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10903 Accepted: 4 ...
- POJ Round Numbers(数位DP)
题目大意: Round Number: 将一个整数转化为二进制数字后,(不含前导0) 要是0的个数 大于等于1的个数 则是 Round Number 问从L-R之中有多少个Round Number ...
- POJ Pseudoprime numbers( Miller-Rabin素数测试 )
链接:传送门 题意:题目给出费马小定理:Fermat's theorem states that for any prime number p and for any integer a > 1 ...
随机推荐
- Linux基本原则
Bash特性 Shell shell(外壳),广义的shell可以理解为是用户的工作环境,在windows看来桌面就是一个shell,在linux看来终端就是shell 常见的shell有两种,一种是 ...
- 联想 lenove 3750 M4服务器更改启动项和管理口IP
联想 lenove 3750 M4服务器更改启动项和管理口IP 注: 因为在机房拍照的原因,再加上工作比较忙:整理成文档的时候有的过程已经忘记了,所以有的步骤可能会缺失,里面的选项都已经用中文方式表达 ...
- Lombok 插件安装和使用
引言 以前的 Java 项目中,充斥着太多毫无技术含量的代码,比如类属性的 getter/setter/toString 方法,还有就是异常处理.I/O 流的关闭操作等.这些样板代码虽然可以通过 ID ...
- STM32 串口接收大量数据导致死机
http://blog.csdn.net/origin333/article/details/49992383 以下文章出自上面的链接.感谢原创作者的分享. 在一项目中,使用STM32作为主控,程序运 ...
- 使用Tomcat插件控制台中文乱码解决方案(IDEA)(Day_51)
解决方案 1. File -> Settings... 2. 搜索 Runner (运行程序),在 'VM options:' 中添加:-Dfile.encoding=GB2312 注:GB23 ...
- oepncv实现——图像去水印
功能简介:通过拖动鼠标实现指定区域水印或是斑点的去除. 实现原理:利用opencv鼠标操作setMouseCallback函数框选(左上到右下)需要处理的区域,按下鼠标开始选中,松开鼠标结束,对选中区 ...
- selenium-元素无法定位解决办法
selenium-元素无法定位解决办法 有时会出现元素定位失败的情况,以百度首页为例,定位输入框,报错如下: selenium.common.exceptions.NoSuchElementExc ...
- 深度学习数据特征提取:ICCV2019论文解析
深度学习数据特征提取:ICCV2019论文解析 Goal-Driven Sequential Data Abstraction 论文链接: http://openaccess.thecvf.com/c ...
- 在cuDNN中简化Tensor Ops
在cuDNN中简化Tensor Ops 在Tesla V100 GPU中引入神经网络模型以来,神经网络模型已迅速利用NVIDIA Tensor Cores进行深度学习.例如,基于Tensor Core ...
- 预测汽车级Linux专业技术的需求
预测汽车级Linux专业技术的需求 Anticipating need for Automotive Grade Linux expertise 在听了多年汽车级Linux(AGL)及其所有潜力之后, ...