博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1016 Numbers That Count 不难,但要注意细节
阅读量:5744 次
发布时间:2019-06-18

本文共 2099 字,大约阅读时间需要 6 分钟。

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

输出的结果又四种情况,建议判断的时候就按照题目的顺序进行判断,否则可能出错。第一种情况是进行一次变换后和原来的数字相同;第二种是进行j次后和原来数字相同;第三种是变换过程中形成了循环,比如70:

      

70是2循环,又最后3组数字可判断出;第四种情况是超过15次变换仍然找不出规律。

#include 
#include
#include
#define MAX 85using 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
=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;}

 

转载于:https://www.cnblogs.com/pach/p/5723373.html

你可能感兴趣的文章
确定当前记录和下一条记录之间相差的天数
查看>>
sql语句返回主键SCOPE_IDENTITY()
查看>>
机器学习开源项目精选TOP30
查看>>
iOS开发-邮件发送
查看>>
/etc/resolv.conf文件详解
查看>>
【转】VC的MFC中重绘函数的使用总结(整理)
查看>>
JQuery日记_5.13 Sizzle选择器(六)选择器的效率
查看>>
oracle查看经常使用的系统信息
查看>>
Django_4_视图
查看>>
Linux的netstat命令使用
查看>>
lvm讲解,磁盘故障小案例
查看>>
大快网站:如何选择正确的hadoop版本
查看>>
经过这5大阶段,你离Java程序员就不远了!
查看>>
IntelliJ IDEA 连接数据库详细过程
查看>>
thymeleaf 学习笔记-基础篇
查看>>
PHP-X开发扩展
查看>>
android学习笔记——onSaveInstanceState的使用
查看>>
工作中如何做好技术积累
查看>>
怎么用sysLinux做U盘双PE+DOS??
查看>>
Spring Transactional
查看>>