首页 > 学院 > 开发设计 > 正文

poj1016

2019-11-11 02:10:51
字体:
来源:转载
供稿:网友

题目大意:

给一串数字n,数其中1,2,3,,,个数,如果结果和原数字串相同,则是n is self-inventorying ,如果是在数了j步之后相同,则是n is self-inventorying after j steps,如果数n是个长度为k的循环,则是n enters an inventory loop of length k,如果15次迭代之后都不是,那么n can not be classified after 15 iterations

解题思路:

写一个函数进行迭代,把15次迭代的结果记录下来,然后看是属于那种情况输出即可

代码如下:

#include<stdio.h>#include<stdlib.h>#include<string.h>void R(char n[85],char t[85]){ int i,j; int time[10]={0}; for(i=0;n[i];i++) time[ n[i]-'0' ]++; for(i=0,j=0;i<10;i++) { if(time[i]) { if(time[i]<10) { t[j++]=time[i]+'0'; t[j++]=i+'0'; } else { t[j++]=time[i]/10+'0'; t[j++]=time[i]%10+'0'; t[j++]=i+'0'; } } } t[j]='/0'; return;}int main(){ int i,j; int flag1,flag2,flag3; char n[16][85]; while(scanf("%s",n[0])&&(n[0][0]!='-')) { flag1=flag2=flag3=0; for(i=1;i<=15;i++) { R(n[i-1],n[i]); } if(!strcmp(n[0],n[1])) { flag1=1; } if(!flag1) { for(i=1;i<15;i++) { if(!strcmp(n[i],n[i+1])) { flag2=i; break; } } if(!flag2) { for(j=1;j<=15;j++) { for(i=0;i<=j-2;i++) { if(!strcmp(n[i],n[j])) { flag3=j-i; break; } } if(flag3) break; } } } if(flag1) PRintf("%s is self-inventorying/n",n); else if(flag2) printf("%s is self-inventorying after %d steps/n",n,flag2); else if(flag3) printf("%s enters an inventory loop of length %d/n",n,flag3); else printf("%s can not be classified after 15 iterations/n",n); } return 0; }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表