题意是将一串数字转换成另一种形式。比如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 不难,但要注意细节的更多相关文章

  1. poj 1016 Numbers That Count

    点击打开链接 Numbers That Count Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17922   Accep ...

  2. POJ1016 Numbers That Count

    题目来源:http://poj.org/problem?id=1016 题目大意: 对一个非负整数定义一种运算(inventory):数这个数中各个数字出现的次数,然后按顺序记录下来.比如“55531 ...

  3. POJ 1016 模拟字符串

    Numbers That Count Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20396   Accepted: 68 ...

  4. Numbers That Count POJ - 1016

    "Kronecker's Knumbers" is a little company that manufactures plastic digits for use in sig ...

  5. POJ 1016

    http://poj.org/problem?id=1016 一道字符串处理的题目,理解题意后注意细节就好. 题意:每一串数字 都可以写成 a1 b1 a2 b2 ....ai bi 其中ai是指bi ...

  6. B - Numbers That Count

    Description        "Kronecker's Knumbers" is a little company that manufactures plastic di ...

  7. poj Pseudoprime numbers 3641

    Pseudoprime numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10903   Accepted: 4 ...

  8. POJ Round Numbers(数位DP)

    题目大意: Round Number:  将一个整数转化为二进制数字后,(不含前导0) 要是0的个数 大于等于1的个数 则是 Round Number 问从L-R之中有多少个Round Number ...

  9. POJ Pseudoprime numbers( Miller-Rabin素数测试 )

    链接:传送门 题意:题目给出费马小定理:Fermat's theorem states that for any prime number p and for any integer a > 1 ...

随机推荐

  1. 目录和文件 按创建时间排序du -h --time --max-depth=1 . |sort -r -t $'\t' -k 2 Linux查看文件夹大小,并按文件夹创建时间排序

    目录和文件 按创建时间排序 # du -h --time --max-depth=1 . |sort -r -t $'\t' -k 230M 2020-04-01 14:54 .28K 2020-04 ...

  2. iPhone手机怎么和电脑互传文件,一条数据线搞定

    官方的方法是,通过iTunes进行文件的传输.传个文件还要特意安装个iTunes,实在是麻烦. 其实我们只需要在苹果应用商店app store下载Documents这个文件就可以. 另外,Docume ...

  3. 怎么样在同一个word文件中删除不同节数的页眉

    1.双击页眉,进入页眉编辑状态2.选择准备删除页眉的节,直接额删除即可.注意:为不至于因该节的改动影响其他节的页眉,需要在页眉设置上,每节都要取消链接到前一节页眉 把那张的前面和后面都插入分隔符,在页 ...

  4. 云计算OpenStack环境搭建(4)

    准备工作: 准备3台机器,确保yum源是可用的,分别为控制节点(192.168.11.3).计算节点(192.168.11.4)和存储节点(192.168.11.5) 控制节点:OpenStack日常 ...

  5. 把采集到的数据发送到一个Google Docs或者Google Form上 这个网站提供了参考和例子

    把采集到的数据发送到一个Google Docs或者Google Form上这个网站提供了参考和例子 http://www.instructables.com/id/Post-to-Google-Doc ...

  6. 6.2 gzip:压缩或解压文件

    gzip命令 用于将一个大的文件通过压缩算法(Lempel-Ziv coding(LZ77))变成一个小的文件.gzip命令不能直接压缩目录,因此目录需要先用tar打包成一个文件,然后tar再调用gz ...

  7. 【错误解决】Error creating bean with name 'transactionManager' :nested exception is java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/

    搭建ssh框架中新建JUint测试出现的问题.这个问题实在太伤脑筋....因为不好找到解决办法 直接先说解决方式:添加org.springframework.jdbc-XX.jar,然后build p ...

  8. 我眼中的WebViewJavascriptBridge(图解)

    工作中涉及到一段时间iOS开发,在开发中有个小小的框架让我非常深刻,就是WebViewJavascriptBridge,用于原生控件与前端交互通信.我觉得WebViewJavascriptBridge ...

  9. Elasticserch与Elasticsearch_dsl用法

    Elasticserch与Elasticsearch_dsl用法 Elasticsearch_dsl::https://elasticsearch-dsl.readthedocs.io/en/late ...

  10. Go语言网络通信---多用户连续通信的TCP编程

    server端: package main import ( "fmt" "net" ) func main() { //建立监听 listener, err ...