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 ...
随机推荐
- 什么是CPU缓存
一.什么是CPU缓存 1. CPU缓存的来历 众所周知,CPU是计算机的大脑,它负责执行程序的指令,而内存负责存数据, 包括程序自身的数据.在很多年前,CPU的频率与内存总线的频率在同一层面上.内存的 ...
- 分析Red Hat sosreport输出的方法
分析Red Hat sosreport输出的方法? Modified on: Fri, 31 May 2019 20:20:02 +0800 有一段时间(自EL 4.6以来),Red Hat嵌入了sy ...
- linux系统开机自动挂载光驱 和 fstab文件详解
Linux 通过 UUID 在 fstab 中自动挂载分区 summerm6关注 2019.10.17 16:29:00字数 1,542阅读 607 https://xiexianbin.cn/lin ...
- Linux_配置本地YUM源(RHEL8)
[RHEL8] Linux-RHEL8配置本地YUM 源,按照之前传统的配置本地YUM的方法肯定不行,在RHEL8版本的软件源发生了变化,在RHEL8版本的软件仓库分成了两部分:[AppStream] ...
- C语言程序设计#成绩查询系统
学生成绩管理系统 [注释]:请点赞,好人一生平[yi]安[wo]. #codeblocks程序下编写 #include<stdio.h>#include<stdlib.h>// ...
- jmeter while控制器踩坑
在使用jmeter测试一个复杂流程,需要用到while控制器,对于里面的contition,使用jexl3方式,怎么看都没有问题,可是死活跳不出流程,各种莫名其妙的报错,甚至用单个写死的变量(已设置为 ...
- Docker 的神秘世界
引言 上图就是 Docker 网站的首页,看了这简短的解释,相信你还是不知道它是何方神圣. 讲个故事 为了更好的理解 Docker 是什么,先来讲个故事: 我需要盖一个房子,于是我搬石头.砍木头.画图 ...
- 如何在思科交换机上配置Telnet远程登录
本地用户认证登录 如果配置本地用户认证,则需要开启本地数据库认证,这时就不需要配置相应虚拟终端认证密码了,但要至少配置一个本地用户并设置用户密码用来进行登录认证,具体配置如下: C2960#conf ...
- ThinkPHP无限级分类(递归)
代码演示 没什么可说的直接看代码 <?php namespace app\controller; class Category { //模拟假数据 protected static functi ...
- golang快速入门(六)特有程序结构
提示:本系列文章适合对Go有持续冲动的读者 阅前须知:在程序结构这章,更多会关注golang中特有结构,与其他语言如C.python中相似结构(命名.声明.赋值.作用域等)不再赘述. 一.golang ...