http://poj.org/problem?id=1016

一道字符串处理的题目,理解题意后注意细节就好。

题意:每一串数字 都可以写成 a1 b1 a2 b2 ....ai bi

其中ai是指bi这个数字,在一串数字中出现过多少次。也就是每一串数字都可以转换成这一种形式

题目就是给你一串数字,让你转换

如果转换后的数字和第一个数字一模一样的话,那么这一种类型被称为 self-inventorying

如果要通过N次转换后,n+1次和n是一模一样的话,那么这一种就被称为is self-inventorying after n steps

如果通过N(N<15)次转换后,在这N次的转换的数串之中,每隔K次就出现同一串数字,那么这种类型被称为 enters an inventory loop of length K

如果15次后,前面三种都没出现的话,那么被称作为can not be classified after 15 iterations

解题思路:

首先每一个数字都要进行统计,那么就需要一个统计次数的一个函数,因为这个需要多次使用。(这里注意次数可能会超过10次)。

其次利用strcmp函数判断两个字符串是否相等,strcmp函数的话,当两个串相等的时候是返回0.

然后就多次反复比较。

我写的还是比较丑。

有很大的优化空间,首先就是那个num可以放到cmp里,这样可以减少很多行的代码。

 #include <stdio.h>
#include <string.h> char num[],cmp[][],ans; int sum(char x[],int len,int m) 这个就是那个统计次数的函数。
{
int sum=;
for(int i=;i<len;i++)
if(x[i]==''+m) sum++;
return sum;
} int main()
{
while(scanf("%s",num),num[]!='-'){
int len=strlen(num); ans=; for(int i=,k=;k<=;i++,k++){ int tmp=sum(num,len,k); if(tmp==){ i--;
continue; }else{
if(tmp>=){ //用来形成新的数串。
cmp[][i]=tmp/+'';
cmp[][++i]=tmp%+'';
cmp[][++i]=k+'';
}
else {
cmp[][i]=tmp+'';
cmp[][++i]=k+'';
}
}
}
int flog=;
if(strcmp(cmp[],num)==){ printf("%s is self-inventorying\n",num);
flog=;
}
else{ for(int i=;i<=;i++){
ans++;
int len=strlen(cmp[i-]);
for(int m=,k=;k<=;m++,k++){ int tmp=sum(cmp[i-],len,k); if(tmp==){ m--;
continue; }else{
if(tmp>=){
cmp[i][m]=tmp/+'';
cmp[i][++m]=tmp%+'';
cmp[i][++m]=k+'';
}
else { cmp[i][m]=tmp+'';
cmp[i][++m]=k+'';
}
}
}
if(strcmp(cmp[i],cmp[i-])==){
printf("%s is self-inventorying after %d steps\n",num,ans);
flog=;
break;
}
}
}
if(flog==){
for(int i=;i<;i++){
for(int j=i+;j<;j++)
if(strcmp(cmp[i],cmp[j])==) {
printf("%s enters an inventory loop of length %d\n",num,j-i);
flog=;
break;
}
if(flog) break;
}
if(flog==) printf("%s can not be classified after 15 iterations\n",num);
}
memset(num,,sizeof(num));
memset(cmp,,sizeof(cmp));
}
return ;
}

POJ 1016的更多相关文章

  1. POJ 1016 模拟字符串

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

  2. poj 1016 Numbers That Count

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

  3. Numbers That Count POJ - 1016

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

  4. POJ 1016 Numbers That Count 不难,但要注意细节

    题意是将一串数字转换成另一种形式.比如5553141转换成2个1,1个3,1个4,3个5,即21131435.1000000000000转换成12011.数字的个数是可能超过9个的.n个m,m是从小到 ...

  5. POJ题目排序的Java程序

    POJ 排序的思想就是根据选取范围的题目的totalSubmittedNumber和totalAcceptedNumber计算一个avgAcceptRate. 每一道题都有一个value,value ...

  6. POJ 题目分类(转载)

    Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...

  7. (转)POJ题目分类

    初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推. ...

  8. poj分类

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

  9. poj 题目分类(1)

    poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...

随机推荐

  1. Linux的io机制

    Linux的io机制 Buffered-IO 和Direct-IO Linux磁盘I/O分为Buffered IO和Direct IO,这两者有何区别呢? 对于Buffered IO: 当应用程序尝试 ...

  2. vim关于 引号和 括号的 高效操作-很好很强大的!

    http://blog.csdn.net/bigshady/article/details/6019963 对括号匹配, 进行跳转, 使用的是%. 匹配的括号, 都会被高亮显示, 但是: 根据光标的 ...

  3. 真正理解linux的inode?

    linux 在整个架构上可以看作是三层: 1.底层代码, (引导层strip) 跟硬件沟通的那一层的代码(可能是汇编+c), 驱动底层的; strain: n./v. 拉紧, 张力, 气质, 风格, ...

  4. ApacheServer-----关于443端口被占用的解决方法

    最经公司项目需要经过Apache服务器转发,自己也下载了ApacheServer,但是在启动的过程中,遇到443端口被占用,网上看了一些解决方法,都不对,没有解决问题. 执行启动命令httpd -k ...

  5. XDU 1161 - 科协的数字游戏II

    Problem 1161 - 科协的数字游戏II Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty: Total Submit: 112  ...

  6. CAN总线 SJA1000中断

    背景: 最近一直在使用C8051F340 + SJA1000来实现CAN通信,就SJA1000部分做个记录. 正文: 整个系统结构拓扑图如下: 两路CAN,C8051F340作为CPU,处理CAN与U ...

  7. Maven工程中报 Missing artifact jdk.tools:jdk.tools:

    jdk.tools:jdk.tools是与JDK一起分发的一个JAR文件,可以如下方式加入到Maven项目中:<dependency>    <groupId>jdk.tool ...

  8. LoadRunner脚本编写(转)

    性能测试工程师要懂代码么?答案是必须的.好多测试员认为在loadrunner中编写脚本很难很牛X ,主要是大多测试人员并未做过开发工作,大学的那点程序基础也忘记的差不多了.还有非计算机专业出身的测试员 ...

  9. Jquery Ajax调用aspx页面方法

    Jquery Ajax调用aspx页面方法 在asp.net webform开发中,用jQuery ajax传值一般有几种玩法 1)普通玩法:通过一般处理程序ashx进行处理: 2)高级玩法:通过as ...

  10. ini文件操作

    Config.ini 文件操作 [SYS] sysname=hy company=hyhy tel=2 using System; using System.Collections.Generic; ...