POJ 1016
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的更多相关文章
- POJ 1016 模拟字符串
Numbers That Count Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20396 Accepted: 68 ...
- poj 1016 Numbers That Count
点击打开链接 Numbers That Count Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17922 Accep ...
- Numbers That Count POJ - 1016
"Kronecker's Knumbers" is a little company that manufactures plastic digits for use in sig ...
- POJ 1016 Numbers That Count 不难,但要注意细节
题意是将一串数字转换成另一种形式.比如5553141转换成2个1,1个3,1个4,3个5,即21131435.1000000000000转换成12011.数字的个数是可能超过9个的.n个m,m是从小到 ...
- POJ题目排序的Java程序
POJ 排序的思想就是根据选取范围的题目的totalSubmittedNumber和totalAcceptedNumber计算一个avgAcceptRate. 每一道题都有一个value,value ...
- POJ 题目分类(转载)
Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...
- (转)POJ题目分类
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- poj分类
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
- poj 题目分类(1)
poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...
随机推荐
- jquery 判断网络图片,或网络文件是否存在
$.ajax({ url : picSrc, async : false, type : 'HEAD', error : function() { picSrc = "https://ss0 ...
- iOS项目重命名以及Xcode修改Scheme名称图文详解 (yoowei)
在iOS开发中,有时候想改一下项目的名字,都会遇到很多麻烦.温馨提醒:记得备份. 看到项目名称,总感觉有点low,所以尝试着要将其更改一下. 项目原结构如下: 更改后的项目结构如下: 下面开始更改操作 ...
- apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法
<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload"> ErrorDocument 404 /404/404.h ...
- CentOs图形界面的开启与关闭
1.1 shell中运行 init 3 进入文本模式,同时会关闭相关的服务(Xserver 肯定关闭) 1.2 Alt+Ctrl+F1~F6到字符界面,root登陆,ps aux|grep /usr ...
- ctrl+c,ctrl+d,ctrl+z在linux中意义
ctrl+c,ctrl+d,ctrl+z在linux中意义 ctrl+c和ctrl+z都是中断命令,但是他们的作用却不一样. ctrl+c是强制中断程序的执行. ctrl+z的是将任务中断 ...
- Ionic 常见问题及解决方案
前言 Ionic是目前较为流行的Hybird App解决方案,在Ionic开发过程中会遇到很多常见的开发问题,本文尝试对这些问题给出解决方案. 一些常识与技巧 list 有延迟,可以在ion-cont ...
- jquery 使用textarea
问题: 若在textarea标签中键入一个回车时,将插入2个字符\n\r ,将在datagrid不能正确显示. \n: 回车符 \r: 换行符 解决方案: txt = txt.Replace(&qu ...
- oracle数据表创建分区与查询
场景: 遇到1亿数据量的数据需要根据用户名做些数据统计分析,想直接做些聚合计算基本没可能,于是打算先根据日期按照年月创建分区,然后对各个分区分别进行统计,最后汇总结果. 有两种方法,分别是手工设置分区 ...
- laravel中间件-----------middleware
middleware中间件 是访问到达服务器后在被对应的路由处理之前所经过的一层过滤层,故称中间件. 中间件是存放在app\http\middleware中,需要定一个 handle 处理方法,在ha ...
- 绝不要进行两层间接非const指针赋值给const指针
#include <stdio.h> #include <stdlib.h> int main(void) { int *p1; int * *pp1; const int * ...