hdu 1032 The 3n + 1 problem
看题目请点这里
题意:
给你2个整数min和max(若min>max要交换2个的值否则会wa),让你求出在[min,max]里的所整数的最大操作次数。
操作规则如下(data为[min,max]里的一个整数):
如果data为奇数且不等于1:data=3*data+1,否则data=data/2,当data=1时本轮操作结束。
记下min到max这些数里的最大操作次数。
代码:
#include<stdio.h>int main(){ int min,max,ans,data,num,i; while(scanf("%d%d",&min,&max)!=EOF) { printf("%d %d",min,max); if(min>max) { max^=min^=max^=min; //交换min、max的值 } for(ans=1,i=min;i<=max;i++) { num=1; data=i; while(data!=1) { data=((data&1)==0?data>>1:3*data+1); num++; //记下data变为1要多少次操作 }if(num>ans){ans=num; //记下min到max这些数的里最大操作次数} } printf(" %d\n",ans); } return 0;}