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 ...
随机推荐
- SpringMVC -rest风格修改删除
REST风格
- Media Wiki
https://www.mediawiki.org/wiki/Help:Images/zh https://www.mediawiki.org/wiki/Manual_talk:Image_admin ...
- Linux下中文字符乱码的问题
来源:Linux社区 作者:frankfellow Linux下中文经常会出现乱码,有的是浏览网页出现乱码:有的是文本模式下显示中文出现乱码.下图显示的是我遇到的问题.我安装的是CentOS,x-w ...
- R 语言程序设计
Data The zip file containing the data can be downloaded here: specdata.zip [2.4MB] The zip file cont ...
- PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
做一个内网根据MAC地址自动登录的应用,在WINDOW 2003可以正常使用,函数如下 复制代码 代码如下: function ce_getmac() { if(PHP_OS == 'WINNT' ...
- 去除tabbar的灰线
去掉导航栏的边界灰线 [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBar ...
- UI第二节——UIButton详解
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...
- DiscuzX 论坛首页 和 分 区设置版块横排
在论坛看到很多新手站长在咨询怎么样才可以设置和Discuz! 官方论坛首页一个分区下面横排3个板块或者更多呢?如下图: 下面我一起来操作下: 论坛 后台 论坛 板块管理 分区 编辑 图一: 图二: 说 ...
- MFC中CString转化为char*
char* convertCStringToChars(CString string) { int nLength=string.GetLength(); ]; memset(c,,nLength+) ...
- js读取修改创建txt文本类型文件(.ini)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...