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 ...
随机推荐
- docker总结复习
一.概念 1.容器( container-based )虚拟化方案,充分利用了操作系统本身已有的机制和特性,以实现轻量级的虚拟化(每个虚拟机安装的不是完整的虚拟机),甚至有人把他称为新一代的虚拟化技术 ...
- python3 列表转换为字符串
join将列表转换为字符串 list1 = ["张三","李四","王五"] a1 = ','.join(list1) print(a1) ...
- Jsoup_Select 选择器
Jsoup_Select 选择器 一,概述 可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数 ...
- USB中TOKEN的CRC5与CRC16校验(神奇的工具生成Verilog实现)
USB2.0IP设计 最近,在学习USB2.0IP的设计,其中包含了CRC校验码的内容,之前学习千兆以太网曾经用到过CRC32校验(https://www.cnblogs.com/Xwangzi66/ ...
- 向pom.xml中配置Maven使用JDK8编译
maven项目会用maven-compiler-plugin默认的jdk版本来进行编译,如果不指明版本就容易出现版本不匹配的问题,可能导致编译不通过的问题. 解决办法:在pom文件中配置maven-c ...
- 【源码解析】阿里在线诊断工具greys源码
撸起袖子加油干!开门见山! 一.源码下载 下载代码: git clone https://github.com/oldmanpushcart/greys-anatomy.git 二.源码分析 2.1 ...
- Linux分区创建、挂载
fdisk -l 这块盘是没有分区的,没有被使用. fdisk /dev/vdb 操作这块磁盘, 创建分区 格式化/dev/sdb1为ext4 mkfs -t ext4 /dev/vdb1 mkfs. ...
- 代码生成codegen
代码生成codegen 该模块提供了从SymPy表达式生成直接可编译代码的功能.该codegen功能是SymPy中代码生成功能的用户界面.下面为可能希望直接使用框架的高级用户提供了一些实现细节. 注意 ...
- 什么是视觉Visual SLAM
什么是视觉Visual SLAM What Is Visual SLAM? What are the origins of visual SLAM? and what are some other a ...
- 用华为MindSpore进行分布式训练
技术背景 分布式和并行计算,在计算机领域是非常重要的概念.对于一些行外人来说,总觉得这是一些很简单的工作,但是如果我们纵观计算机的硬件发展史,从CPU到GPU,再到TPU和华为的昇腾(NPU),乃至当 ...